factorio_blueprint/
whitespace_remover.rs

1use std::io::{Read, Result};
2
3/// Remove all ascii whitespace from an incoming stream.
4pub struct WhitespaceRemover<R> {
5    inner: R,
6}
7
8impl<R> WhitespaceRemover<R>
9where
10    R: Read,
11{
12    pub fn new(inner: R) -> WhitespaceRemover<R> {
13        WhitespaceRemover { inner }
14    }
15}
16
17impl<R> Read for WhitespaceRemover<R>
18where
19    R: Read,
20{
21    fn read(&mut self, buf: &mut [u8]) -> Result<usize> {
22        let mut my_buf = vec![0; buf.len()];
23        let n = self.inner.read(&mut my_buf)?;
24        my_buf.truncate(n);
25        my_buf.retain(|d| !d.is_ascii_whitespace());
26        buf[..my_buf.len()].copy_from_slice(&my_buf);
27        Ok(my_buf.len())
28    }
29}