diff options
| author | Nathan Reiner <nathan@nathanreiner.xyz> | 2026-09-02 08:17:42 +0200 |
|---|---|---|
| committer | Nathan Reiner <nathan@nathanreiner.xyz> | 2026-09-02 08:17:42 +0200 |
| commit | 6c2e06ed20cdea1a67629554d8aa1d5fcda030f9 (patch) | |
| tree | e5fa1f199a35e455917f661a62b38505afa703d7 /src/type/Watcher.zig | |
| parent | 804204db7cf1e8a28defd359d17fa72949e13eff (diff) | |
Implement sequences and tuples
Diffstat (limited to 'src/type/Watcher.zig')
| -rw-r--r-- | src/type/Watcher.zig | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/type/Watcher.zig b/src/type/Watcher.zig new file mode 100644 index 0000000..6369df5 --- /dev/null +++ b/src/type/Watcher.zig @@ -0,0 +1,43 @@ +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; + } +} |