const std = @import("std"); const c = @import("c"); const zpy = @import("root.zig"); const conversion = zpy.conversion; const Self = @This(); object: zpy.Object, 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 .{ .object = .fromPtr(try conversion.ptr(result)), }; } 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 deinit(self: *Self) void { self.object.decref(); }