const std = @import("std"); const c = @import("c"); const zpy = @import("../root.zig"); const Self = @This(); id: c_int, pub const Callback = fn (*zpy.Type) error{Exception}!void; pub fn add(callback: Callback) !Self { const wrapper = struct { pub fn wrapper(t: [*c]c.PyObject) callconv(.c) c_int { return if (std.meta.isError(callback(@ptrCast(t)))) -1 else 0; } }; const result = c.PyType_AddWatcher(&wrapper); if (result == -1) { return error.Exception; } return .{ .id = result }; } pub fn clear(self: Self) !void { if (c.PyType_Clear(self.id) == -1) { return error.Exception; } } pub fn watch(self: Self, t: *zpy.Dict) !void { if (c.PyType_Watch(self.id, t) == -1) { return error.Exception; } } pub fn unwatch(self: Self, t: *zpy.Dict) !void { if (c.PyType_Unwatch(self.id, t) == -1) { return error.Exception; } }