1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
pub fn create_padding(element: char, required: usize, actual: usize) -> String {
    if let Some(count) = required.checked_sub(actual) {
        std::iter::repeat(element).take(count).collect()
    } else {
        String::from("")
    }
}

pub fn remove_char(string: &str, index: usize) -> String {
    let next = index + 1;
    return format!("{}{}", &string[..index], &string[next..]);
}

#[cfg(test)]
pub mod tests {
    use std::io;
    use std::io::Write;

    pub struct BufferWriter {
        pub buffer: String,
    }

    impl BufferWriter {
        pub fn new() -> BufferWriter {
            let buffer = String::new();
            return BufferWriter { buffer };
        }
    }

    impl Write for BufferWriter {
        fn write(&mut self, buffer: &[u8]) -> io::Result<usize> {
            unsafe { self.buffer.as_mut_vec().write(buffer) }
        }

        fn flush(&mut self) -> io::Result<()> {
            Ok(())
        }
    }
}