diff options
Diffstat (limited to 'src/Object.zig')
| -rw-r--r-- | src/Object.zig | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/Object.zig b/src/Object.zig new file mode 100644 index 0000000..782071f --- /dev/null +++ b/src/Object.zig @@ -0,0 +1,40 @@ +const std = @import("std"); +const c = @import("c"); +const zpy = @import("root.zig"); + +const Self = @This(); + +ptr: *c.PyObject, + +pub fn fromPtr(ptr: *c.PyObject) Self { + return .{ .ptr = ptr }; +} + + +pub fn fromC(ptr: [*c]c.PyObject) ?Self { + return if (ptr) |p| .fromPtr(p) else null; +} + +pub fn decref(self: *Self) void { + c.Py_DecRef(self.ptr); +} + +pub fn repr(self: *const Self) zpy.Str { + return .{ .object = .fromPtr(c.PyObject_Repr(self.ptr)) }; +} + +pub fn call(self: *Self, args: anytype) zpy.Error!zpy.Object { + _ = args; + if (c.PyObject_CallObject(self.ptr, null)) |object| { + return .fromPtr(object); + } + + return error.Exception; +} + +pub fn format(self: *const Self, writer: *std.Io.Writer) !void { + var str = self.repr(); + defer str.deinit(); + + try writer.print("{s}", .{str.asUtf8() catch return error.WriteFailed}); +} |