const c = @import("c"); const zpy = @import("root.zig"); const conversion = zpy.conversion; const Self = @This(); object: zpy.Object, pub fn new(items: []const zpy.Object) !Self { var list: Self = .{ .object = .fromPtr(try conversion.ptr(c.PyList_New(items.len))), }; errdefer list.deinit(); for (items, 0..) |item, index| { try list.insert(index, item); } } pub fn size(self: *const Self) usize { return @as(usize, c.PyList_Size(self.object.ptr)); } pub fn get(self: *const Self, index: usize) !zpy.Object { return .fromC(try conversion.ptr(c.PyList_GetItem(self.object.ptr, index))); } pub fn set(self: *Self, index: usize, value: zpy.Object) !void { return conversion.success( c.PyList_SetItem(self.object.ptr, index, value.ptr), ); } pub fn insert(self: *Self, index: usize, value: zpy.Object) !void { return .conversion.success( c.PyList_Insert(self.object.ptr, index, value.ptr) ); } pub fn append(self: *Self, value: zpy.Object) !void { return .conversion.success( c.PyList_Append(self.object.ptr, value.ptr), ); } pub fn deinit(self: *Self) void { self.object.decref(); }