Skip to content

Commit 983f76c

Browse files
committed
fix constructor to pass Vec
1 parent 4b3a373 commit 983f76c

File tree

2 files changed

+15
-23
lines changed

2 files changed

+15
-23
lines changed

Diff for: chapter3/src/3_7/multi_reader.rs

+3-9
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,13 @@
1-
use std::{
2-
collections::VecDeque,
3-
io::{copy, stdout, Read},
4-
};
1+
use std::io::{copy, stdout};
52

63
use lib::io::MultiReader;
74

85
fn main() -> std::io::Result<()> {
96
let header = "---- HEADER ----\n".as_bytes();
107
let content = "Example of MultiReader\n".as_bytes();
118
let footer = "---- FOOTER ----\n".as_bytes();
12-
let mut multi_reader = MultiReader::new(VecDeque::from(vec![
13-
Box::new(header) as Box<dyn Read>,
14-
Box::new(content) as Box<dyn Read>,
15-
Box::new(footer) as Box<dyn Read>,
16-
]));
9+
let mut multi_reader =
10+
MultiReader::new(vec![Box::new(header), Box::new(content), Box::new(footer)]);
1711
copy(&mut multi_reader, &mut stdout())?;
1812

1913
Ok(())

Diff for: lib/src/io/multi_reader.rs

+12-14
Original file line numberDiff line numberDiff line change
@@ -6,36 +6,34 @@ use std::{collections::VecDeque, io::Read};
66
/// # Example
77
///
88
/// ```
9-
/// use std::{
10-
/// collections::VecDeque,
11-
/// io::{copy, stdout, Read},
12-
/// };
9+
/// use std::io::{copy, stdout};
1310
/// use lib::io::MultiReader;
1411
///
1512
/// fn main() -> std::io::Result<()> {
1613
/// let header = "---- HEADER ----\n".as_bytes();
1714
/// let content = "Example of MultiReader\n".as_bytes();
1815
/// let footer = "---- FOOTER ----\n".as_bytes();
19-
/// let mut multi_reader = MultiReader::new(VecDeque::from(vec![
20-
/// Box::new(header) as Box<dyn Read>,
21-
/// Box::new(content) as Box<dyn Read>,
22-
/// Box::new(footer) as Box<dyn Read>,
23-
/// ]));
16+
/// let mut multi_reader =
17+
/// MultiReader::new(vec![Box::new(header), Box::new(content), Box::new(footer)]);
2418
/// copy(&mut multi_reader, &mut stdout())?;
2519
/// Ok(())
2620
/// }
2721
/// ```
2822
pub struct MultiReader {
2923
readers: VecDeque<Box<dyn Read>>,
30-
/// Points to where we read right now.
24+
/// Points to current element while reading.
3125
current: Option<Box<dyn Read>>,
3226
}
3327

3428
impl MultiReader {
35-
/// Creates `MultiReader`. `pos` is set to 0 by default.
36-
pub fn new(mut readers: VecDeque<Box<dyn Read>>) -> Self {
37-
let current = readers.pop_front();
38-
Self { readers, current }
29+
/// Constructs `MultiReader`. `current` is set to the first element that is popped out from `VecDeque`.
30+
pub fn new(readers: Vec<Box<dyn Read>>) -> Self {
31+
let mut deque = VecDeque::from(readers);
32+
let current = deque.pop_front();
33+
Self {
34+
readers: deque,
35+
current,
36+
}
3937
}
4038
}
4139

0 commit comments

Comments
 (0)