Merge branch 'odin' of git.hitchhiker-linux.org:jeang3nie/b64_rs into odin
This commit is contained in:
commit
beabb1bb0f
@ -42,7 +42,7 @@ use {
|
||||
};
|
||||
|
||||
fn main() {
|
||||
let mut decoder = Decoder::new("SGVsbG8sIFdvcmxkIQ==".as_bytes(), vec![], None);
|
||||
let mut decoder = Decoder::new("SGVsbG8sIFdvcmxkIQ==".as_bytes(), vec![], None, false);
|
||||
let output = decoder.decode().unwrap();
|
||||
assert_eq!(&output, b"Hello, World!");
|
||||
}
|
||||
|
@ -8,14 +8,16 @@ pub struct Decoder<R: Read, W: Write> {
|
||||
reader: R,
|
||||
writer: W,
|
||||
alphabet: B64Alphabet,
|
||||
ignore_whitespace: bool,
|
||||
}
|
||||
|
||||
impl<R: Read, W: Write> Decoder<R, W> {
|
||||
pub fn new(reader: R, writer: W, alphabet: Option<B64Alphabet>) -> Self {
|
||||
pub fn new(reader: R, writer: W, alphabet: Option<B64Alphabet>, ignore_whitespace: bool) -> Self {
|
||||
Self {
|
||||
reader,
|
||||
writer,
|
||||
alphabet: alphabet.unwrap_or_default(),
|
||||
ignore_whitespace,
|
||||
}
|
||||
}
|
||||
|
||||
@ -43,7 +45,9 @@ impl<R: Read, W: Write> Decoder<R, W> {
|
||||
while n_bytes < 4 {
|
||||
match byte_reader.next() {
|
||||
Some(Ok(b)) => {
|
||||
if b == b'\n' || b == b'\r' {
|
||||
if self.ignore_whitespace && b.is_ascii_whitespace() {
|
||||
continue;
|
||||
} else if b == b'\n' || b == b'\r' {
|
||||
continue;
|
||||
} else {
|
||||
in_buf[n_bytes] = b;
|
||||
@ -98,19 +102,26 @@ mod tests {
|
||||
|
||||
#[test]
|
||||
fn decode() {
|
||||
let mut decoder = Decoder::new("SGVsbG8sIFdvcmxk".as_bytes(), vec![], None);
|
||||
let mut decoder = Decoder::new("SGVsbG8sIFdvcmxk".as_bytes(), vec![], None, false);
|
||||
let mut output = decoder.decode().unwrap();
|
||||
assert_eq!(String::from_utf8(output.clone()).unwrap(), "Hello, World");
|
||||
output.clear();
|
||||
decoder = Decoder::new("SGVsbG8sIFdvcmxkIQ==".as_bytes(), output, None);
|
||||
decoder = Decoder::new("SGVsbG8sIFdvcmxkIQ==".as_bytes(), output, None, false);
|
||||
output = decoder.decode().unwrap();
|
||||
assert_eq!(String::from_utf8(output.clone()).unwrap(), "Hello, World!");
|
||||
output.clear();
|
||||
decoder = Decoder::new("SGVsbG8sIFdvcmxkIQo=".as_bytes(), output, None);
|
||||
decoder = Decoder::new("SGVsbG8sIFdvcmxkIQo=".as_bytes(), output, None, false);
|
||||
output = decoder.decode().unwrap();
|
||||
assert_eq!(String::from_utf8(output).unwrap(), "Hello, World!\n");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn ignore_whitespace() {
|
||||
let decoder = Decoder::new(" SG\tVsbG8sIFdvcmxkIQ==".as_bytes(), vec![], None, true);
|
||||
let output = decoder.decode().unwrap();
|
||||
assert_eq!(String::from_utf8(output.clone()).unwrap(), "Hello, World!");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn decode_wrapped() {
|
||||
let infile = File::open("src/testdata/lorem_b64.txt").unwrap();
|
||||
@ -120,7 +131,7 @@ mod tests {
|
||||
.unwrap()
|
||||
.read_to_end(&mut outfile)
|
||||
.unwrap();
|
||||
let decoder = Decoder::new(reader, vec![], None);
|
||||
let decoder = Decoder::new(reader, vec![], None, false);
|
||||
assert_eq!(decoder.decode().unwrap(), outfile);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user