Overall code cleanup

This commit is contained in:
Nathan Fisher 2025-01-09 23:24:59 -05:00
parent 26f0e5ed4a
commit bd8cb8200b
3 changed files with 14 additions and 22 deletions

View File

@ -72,16 +72,15 @@ impl<R: Read, W: Write> Decoder<R, W> {
}
let mut bytes = 0;
for (i, &c) in in_buf.iter().enumerate() {
let c = c.into();
num <<= 6;
if c == char::from(self.alphabet.pad()) {
if c == self.alphabet.pad() {
continue;
}
if i != bytes {
return Err(Error::IllegalChar(c));
return Err(Error::IllegalChar(c.into()));
}
let Some(idx) = self.alphabet.get(c) else {
return Err(Error::IllegalChar(c));
return Err(Error::IllegalChar(c.into()));
};
num |= u32::try_from(idx)?;
bytes += 1;
@ -109,22 +108,22 @@ mod tests {
fn decode() {
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");
assert_eq!(output.clone(), b"Hello, World");
output.clear();
decoder = Decoder::new("SGVsbG8sIFdvcmxkIQ==".as_bytes(), output, None, false);
output = decoder.decode().unwrap();
assert_eq!(String::from_utf8(output.clone()).unwrap(), "Hello, World!");
assert_eq!(output.clone(), b"Hello, World!");
output.clear();
decoder = Decoder::new("SGVsbG8sIFdvcmxkIQo=".as_bytes(), output, None, false);
output = decoder.decode().unwrap();
assert_eq!(String::from_utf8(output).unwrap(), "Hello, World!\n");
assert_eq!(output, b"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!");
assert_eq!(output, b"Hello, World!");
}
#[test]

View File

@ -69,21 +69,14 @@ impl<R: Read, W: Write> Encoder<R, W> {
}
if let Some(wrap) = self.wrap {
for idx in 0..=3 {
write!(self.writer, "{}", char::from(obuf[idx]))?;
self.writer.write_all(&[obuf[idx]])?;
total += 1;
if total % wrap == 0 {
writeln!(self.writer)?;
}
}
} else {
write!(
self.writer,
"{}{}{}{}",
char::from(obuf[0]),
char::from(obuf[1]),
char::from(obuf[2]),
char::from(obuf[3])
)?;
self.writer.write_all(&obuf)?;
}
if outlen < 4 {
break;
@ -105,7 +98,7 @@ mod tests {
fn encode() {
let mut encoder = Encoder::new("Hello, World".as_bytes(), vec![], None, None);
encoder.encode().unwrap();
assert_eq!(encoder.writer, "SGVsbG8sIFdvcmxk".as_bytes());
assert_eq!(encoder.writer, b"SGVsbG8sIFdvcmxk");
encoder = Encoder {
reader: "Hello, World!".as_bytes(),
writer: vec![],
@ -113,10 +106,10 @@ mod tests {
wrap: None,
};
encoder.encode().unwrap();
assert_eq!(encoder.writer, "SGVsbG8sIFdvcmxkIQ==".as_bytes());
assert_eq!(encoder.writer, b"SGVsbG8sIFdvcmxkIQ==");
encoder = Encoder::new("Hello, World!\n".as_bytes(), vec![], None, None);
encoder.encode().unwrap();
assert_eq!(encoder.writer, "SGVsbG8sIFdvcmxkIQo=".as_bytes());
assert_eq!(encoder.writer, b"SGVsbG8sIFdvcmxkIQo=");
}
#[test]

View File

@ -33,9 +33,9 @@ impl Default for B64Alphabet {
}
impl B64Alphabet {
pub(crate) fn get(&self, c: char) -> Option<usize> {
pub(crate) fn get(&self, c: u8) -> Option<usize> {
for (idx, x) in self.items.iter().enumerate() {
if char::from(*x) == c {
if *x == c {
return Some(idx);
}
}