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

View File

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

View File

@ -33,9 +33,9 @@ impl Default for B64Alphabet {
} }
impl 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() { for (idx, x) in self.items.iter().enumerate() {
if char::from(*x) == c { if *x == c {
return Some(idx); return Some(idx);
} }
} }