fn int(self: *Encoder, comptime T: type, value: T) !void self: *EncoderT: typevalue: T146
147
148
149
150
151
152
153
154
155
156
157fn int(self: *Encoder, comptime T: type, value: T) !void {
const info = @typeInfo(T).int;
const Unsigned = @Int(.unsigned, info.bits);
const pad: u8 = if (info.signedness == .signed and value < 0) 0xff else 0;
var buf: [@sizeOf(Unsigned) + 1]u8 = undefined;
buf[0] = pad;
std.mem.writeInt(Unsigned, buf[1..], @bitCast(value), .big);
var first: usize = 0;
while (first + 1 < buf.len and buf[first] == pad and (buf[first + 1] ^ pad) & 0x80 == 0) first += 1;
try self.buffer.prependSlice(buf[first..]);
}