Function encode [src]

Encodes a binary buffer into a base64 string. The output buffer must be at least encodedLen(bin.len) bytes long.

Prototype

pub fn encode(encoded: []u8, bin: []const u8, comptime variant: Variant) error{NoSpaceLeft}![]const u8

Parameters

encoded: []u8bin: []const u8variant: Variant

Possible Errors

NoSpaceLeft

Source

pub fn encode(encoded: []u8, bin: []const u8, comptime variant: Variant) error{NoSpaceLeft}![]const u8 { var acc_len: u4 = 0; var b64_pos: usize = 0; var acc: u16 = 0; const nibbles = bin.len / 3; const remainder = bin.len - 3 * nibbles; var b64_len = nibbles * 4; if (remainder != 0) { b64_len += if (variant.padding) 4 else 2 + (remainder >> 1); } if (encoded.len < b64_len) { return error.NoSpaceLeft; } const urlsafe = variant.urlsafe_alphabet; for (bin) |v| { acc = (acc << 8) + v; acc_len += 8; while (acc_len >= 6) { acc_len -= 6; encoded[b64_pos] = charFromByte(@as(u6, @truncate(acc >> acc_len)), urlsafe); b64_pos += 1; } } if (acc_len > 0) { encoded[b64_pos] = charFromByte(@as(u6, @truncate(acc << (6 - acc_len))), urlsafe); b64_pos += 1; } while (b64_pos < b64_len) { encoded[b64_pos] = '='; b64_pos += 1; } return encoded[0..b64_pos]; }