diff --git a/src/decode.rs b/src/decode.rs index db2b19a..7b7950d 100644 --- a/src/decode.rs +++ b/src/decode.rs @@ -72,16 +72,15 @@ impl Decoder { } 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] diff --git a/src/encode.rs b/src/encode.rs index 60baf7e..f2bcc2d 100644 --- a/src/encode.rs +++ b/src/encode.rs @@ -69,21 +69,14 @@ impl Encoder { } 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] diff --git a/src/lib.rs b/src/lib.rs index bbcf11e..759159d 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -33,9 +33,9 @@ impl Default for B64Alphabet { } impl B64Alphabet { - pub(crate) fn get(&self, c: char) -> Option { + pub(crate) fn get(&self, c: u8) -> Option { for (idx, x) in self.items.iter().enumerate() { - if char::from(*x) == c { + if *x == c { return Some(idx); } }