const std = @import("std"); const c = @import("c"); const zpy = @import("root.zig"); pub const Int = extern struct { const Self = @This(); data: c.PyObject, pub fn from(value: anytype) !*Self { const T = @TypeOf(value); const result = switch (@typeInfo(T)) { .int => |i| switch (i.signedness) { .signed => c.PyLong_FromLong(value), .unsigned => c.PyLong_FromUnsignedLong(value), }, .comptime_int => c.PyLong_FromLong(value), .float => c.PyLong_FromDouble(value), else => @compileError("value must be numberic."), }; return @ptrCast(result orelse return error.Exception); } pub fn as(self: *const Self, T: type) T { return switch(@typeInfo(T)) { .int => |i| switch (i) { .signed => c.PyLong_AsLong(self.object.ptr), .unsigned => c.PyLong_AsUnsignedLong(self.object.ptr), }, .float => c.PyLong_AsDouble(self.object.ptr), else => @compileError("value must be numberic."), }; } pub fn asObject(self: *Self) *zpy.Object { return @ptrCast(self); } };