const std = @import("std"); const c = @import("c"); const zpy = @import("../root.zig"); pub const Type = extern struct { const Self = @This(); data: c.PyObject, pub const Watcher = @import("Watcher.zig"); pub const Description = extern struct { name: [*:0]const u8, doc: ?[*:0]const u8 = null, }; pub fn new(description: Description, comptime fields: []const Description) !*Self { var c_desc: c.PyStructSequence_Desc = .{ .name = @ptrCast(description.name), .doc = @ptrCast(description.doc), .fields = @ptrCast(@constCast(fields)), .n_in_sequence = @intCast(fields.len), }; return @ptrCast(c.PyStructSequence_NewType(@ptrCast(&c_desc)) orelse return error.Exception); } pub fn getDict(self: *Self) *zpy.Dict { return @ptrCast(c.PyType_GetDict(@ptrCast(self))); } pub fn modified(self: *Self) void { c.PyType_Modified(@ptrCast(self)); } pub fn isGc(self: *Self) bool { return c.PyType_IS_GC(@ptrCast(self)) != 0; } pub fn isSubtype(self: *Self, target: *Self) bool { return c.PyType_IsSubtype(@ptrCast(self), @ptrCast(target)) != 0; } pub fn ready(self: *Self) !void { if (c.PyType_Ready(@ptrCast(self)) == -1) { return error.Exception; } } pub fn getName(self: *Self) *zpy.Str { return @ptrCast(c.Pytype_GetName(@ptrCast(self))); } pub fn asObject(self: *Self) *zpy.Object { return @ptrCast(self); } };