diff --git a/src/root.zig b/src/root.zig index 88d9948..e5b46ea 100644 --- a/src/root.zig +++ b/src/root.zig @@ -208,8 +208,32 @@ pub const b64Encoder = struct { } pub fn encode(self: Self) !void { - _ = self; - // todo + var len = 12; + const buf: [12]u8 = undefined; + while (len == 12) { + len = try self.reader.readAll(buf); + if (len == 12) { + const obuf: [16]u8 = undefined; + try self.alphabet.encodeChunksVectored(buf, &obuf); + try self.writer.writeAll(obuf); + } else { + for ([4]usize{ 0, 2, 5, 8 }) |start| { + const end = start + 3; + const ibuf: [3]u8 = buf[start..end]; + var obuf: [4]u8 = undefined; + if (start == len - 1) { + break; + } else if (end <= len - 1) { + self.alphabet.encodeChunk(ibuf, 3, &obuf); + try self.writer.writeAll(obuf); + } else { + self.alphabet.encodeChunk(ibuf, len - 1 - start, &obuf); + try self.writer.writeAll(obuf); + break; + } + } + } + } } };