fn int(self: *Encoder, comptime T: type, value: T) !void
fn 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..]); }