lib/peer/src/text.zig

daab053ee43316e1809a84551d573ddd1e5bf3d2

 1 const std = @import("std");
 2 
 3 pub const EncodeError = error{OutputTooSmall};
 4 pub const DecodeError = error{
 5     InvalidEncoding,
 6     InvalidLength,
 7     OutputTooSmall,
 8 };
 9 
10 pub fn encodedLength(source_bytes: usize) usize {
11     return std.base64.url_safe_no_pad.Encoder.calcSize(source_bytes);
12 }
13 
14 pub fn encode(source: []const u8, output: []u8) EncodeError![]const u8 {
15     const needed = encodedLength(source.len);
16     if (output.len < needed) return error.OutputTooSmall;
17     return std.base64.url_safe_no_pad.Encoder.encode(output[0..needed], source);
18 }
19 
20 pub fn decodedLength(source: []const u8) DecodeError!usize {
21     return std.base64.url_safe_no_pad.Decoder.calcSizeForSlice(source) catch
22         return error.InvalidLength;
23 }
24 
25 pub fn decode(source: []const u8, output: []u8) DecodeError!usize {
26     const needed = try decodedLength(source);
27     if (output.len < needed) return error.OutputTooSmall;
28     std.base64.url_safe_no_pad.Decoder.decode(output[0..needed], source) catch
29         return error.InvalidEncoding;
30     return needed;
31 }