save the library (make it work on latest zig)

This commit is contained in:
ajpd 2025-04-10 03:38:13 -05:00
parent b14ed1f61e
commit c9b3166ace
5 changed files with 25 additions and 30 deletions

View File

@ -16,10 +16,6 @@ pub fn build(b: *std.Build) void {
const zlib = b.dependency("zlib", .{}); const zlib = b.dependency("zlib", .{});
const deque = b.dependency("zig-deque", .{
.target = target,
.optimize = optimize,
});
const dzig = b.addModule("discord.zig", .{ const dzig = b.addModule("discord.zig", .{
.root_source_file = b.path("src/discord.zig"), .root_source_file = b.path("src/discord.zig"),
@ -28,7 +24,6 @@ pub fn build(b: *std.Build) void {
dzig.addImport("ws", websocket.module("websocket")); dzig.addImport("ws", websocket.module("websocket"));
dzig.addImport("zlib", zlib.module("zlib")); dzig.addImport("zlib", zlib.module("zlib"));
dzig.addImport("deque", deque.module("zig-deque"));
const marin = b.addExecutable(.{ const marin = b.addExecutable(.{
.name = "marin", .name = "marin",
@ -41,7 +36,6 @@ pub fn build(b: *std.Build) void {
marin.root_module.addImport("discord", dzig); marin.root_module.addImport("discord", dzig);
marin.root_module.addImport("ws", websocket.module("websocket")); marin.root_module.addImport("ws", websocket.module("websocket"));
marin.root_module.addImport("zlib", zlib.module("zlib")); marin.root_module.addImport("zlib", zlib.module("zlib"));
marin.root_module.addImport("deque", deque.module("zig-deque"));
//b.installArtifact(marin); //b.installArtifact(marin);
@ -61,7 +55,6 @@ pub fn build(b: *std.Build) void {
lib.root_module.addImport("ws", websocket.module("websocket")); lib.root_module.addImport("ws", websocket.module("websocket"));
lib.root_module.addImport("zlib", zlib.module("zlib")); lib.root_module.addImport("zlib", zlib.module("zlib"));
lib.root_module.addImport("deque", deque.module("zig-deque"));
// docs // docs
const docs_step = b.step("docs", "Generate documentation"); const docs_step = b.step("docs", "Generate documentation");

View File

@ -6,7 +6,8 @@
// //
// It is redundant to include "zig" in this name because it is already // It is redundant to include "zig" in this name because it is already
// within the Zig package namespace. // within the Zig package namespace.
.name = "discord.zig", .name = .discordzig,
.fingerprint = 0xa3bc9c6f53658b29,
// This is a [Semantic Version](https://semver.org/). // This is a [Semantic Version](https://semver.org/).
// In a future version of Zig it will be used for package deduplication. // In a future version of Zig it will be used for package deduplication.
@ -23,17 +24,13 @@
// Once all dependencies are fetched, `zig build` no longer requires // Once all dependencies are fetched, `zig build` no longer requires
// internet connectivity. // internet connectivity.
.dependencies = .{ .dependencies = .{
.@"zig-deque" = .{
.url = "https://github.com/magurotuna/zig-deque/archive/refs/heads/main.zip",
.hash = "1220d1bedf7d5cfc7475842b3d4e8f03f1308be2e724a036677cceb5c4db13c3da3d",
},
.zlib = .{ .zlib = .{
.url = "https://github.com/yuzudev/zig-zlib/archive/refs/heads/main.zip", .url = "https://github.com/yuzudev/zig-zlib/archive/refs/heads/main.zip",
.hash = "1220cd041e8d04f1da9d6f46d0438f4e6809b113ba3454fffdaae96b59d2b35a6b2b", .hash = "zlib-0.1.0-AAAAAKm6QADNBB6NBPHanW9G0EOPTmgJsRO6NFT__arp",
}, },
.websocket = .{ .websocket = .{
.url = "https://github.com/yuzudev/websocket.zig/archive/refs/heads/master.zip", .url = "https://github.com/karlseguin/websocket.zig/archive/refs/heads/master.zip",
.hash = "12207c03624f9f5a1c444bde3d484a9b1e927a902067fded98364b714de412d318e0", .hash = "websocket-0.1.0-ZPISdYBIAwB1yO6AFDHRHLaZSmpdh4Bz4dCmaQUqNNWh"
}, },
}, },
.paths = .{ .paths = .{

View File

@ -16,7 +16,6 @@
const std = @import("std"); const std = @import("std");
const mem = std.mem; const mem = std.mem;
const Deque = @import("deque").Deque;
const builtin = @import("builtin"); const builtin = @import("builtin");
const Types = @import("./structures/types.zig"); const Types = @import("./structures/types.zig");
@ -104,7 +103,13 @@ pub fn ConnectQueue(comptime T: type) type {
shard: T, shard: T,
}; };
dequeue: Deque(RequestWithShard), // ignore this function
// so it becomes a regular dequeue
fn eq(_: void, _: RequestWithShard, _: RequestWithShard) std.math.Order {
return std.math.Order.eq;
}
dequeue: std.PriorityDequeue(RequestWithShard, void, eq),
allocator: mem.Allocator, allocator: mem.Allocator,
remaining: usize, remaining: usize,
interval_time: u64 = 5000, interval_time: u64 = 5000,
@ -114,7 +119,7 @@ pub fn ConnectQueue(comptime T: type) type {
pub fn init(allocator: mem.Allocator, concurrency: usize, interval_time: u64) !ConnectQueue(T) { pub fn init(allocator: mem.Allocator, concurrency: usize, interval_time: u64) !ConnectQueue(T) {
return .{ return .{
.allocator = allocator, .allocator = allocator,
.dequeue = try Deque(RequestWithShard).init(allocator), .dequeue = std.PriorityDequeue(RequestWithShard, void, eq).init(allocator, {}),
.remaining = concurrency, .remaining = concurrency,
.interval_time = interval_time, .interval_time = interval_time,
.concurrency = concurrency, .concurrency = concurrency,
@ -127,7 +132,7 @@ pub fn ConnectQueue(comptime T: type) type {
pub fn push(self: *ConnectQueue(T), req: RequestWithShard) !void { pub fn push(self: *ConnectQueue(T), req: RequestWithShard) !void {
if (self.remaining == 0) { if (self.remaining == 0) {
return self.dequeue.pushBack(req); return self.dequeue.add(req);
} }
self.remaining -= 1; self.remaining -= 1;
@ -136,7 +141,7 @@ pub fn ConnectQueue(comptime T: type) type {
self.running = true; self.running = true;
} }
if (self.dequeue.len() < self.concurrency) { if (self.dequeue.count() < self.concurrency) {
// perhaps store this? // perhaps store this?
const ptr = try self.allocator.create(RequestWithShard); const ptr = try self.allocator.create(RequestWithShard);
ptr.* = req; ptr.* = req;
@ -144,15 +149,15 @@ pub fn ConnectQueue(comptime T: type) type {
return; return;
} }
return self.dequeue.pushBack(req); return self.dequeue.add(req);
} }
fn startInterval(self: *ConnectQueue(T)) !void { fn startInterval(self: *ConnectQueue(T)) !void {
while (self.running) { while (self.running) {
std.Thread.sleep(std.time.ns_per_ms * (self.interval_time / self.concurrency)); std.Thread.sleep(std.time.ns_per_ms * (self.interval_time / self.concurrency));
const req: ?RequestWithShard = self.dequeue.popFront(); const req: ?RequestWithShard = self.dequeue.removeMin(); // pop front
while (self.dequeue.len() == 0 and req == null) {} while (self.dequeue.count() == 0 and req == null) {}
if (req) |r| { if (req) |r| {
const ptr = try self.allocator.create(RequestWithShard); const ptr = try self.allocator.create(RequestWithShard);
@ -165,7 +170,7 @@ pub fn ConnectQueue(comptime T: type) type {
self.remaining += 1; self.remaining += 1;
} }
if (self.dequeue.len() == 0) { if (self.dequeue.count() == 0) {
self.running = false; self.running = false;
} }
} }

View File

@ -884,7 +884,7 @@ pub const BailingAllocator = struct {
fn bail(self: *BailingAllocator) void { fn bail(self: *BailingAllocator) void {
for (0..self.responsibilities.len) |i| { for (0..self.responsibilities.len) |i| {
const memory = self.responsibilities.get(i); const memory = self.responsibilities.get(i);
self.child_allocator.rawFree(memory.ptr[0..memory.len], memory.ptr_align, 0); self.child_allocator.rawFree(memory.ptr[0..memory.len], .fromByteUnits(memory.ptr_align), 0);
} }
self.responsibilities.deinit(self.child_allocator); self.responsibilities.deinit(self.child_allocator);
} }
@ -1132,13 +1132,13 @@ pub fn parseInto(comptime T: type, allocator: mem.Allocator, value: JsonType) Er
} }
}, },
.pointer => |ptrInfo| switch (ptrInfo.size) { .pointer => |ptrInfo| switch (ptrInfo.size) {
.One => { .one => {
// we simply allocate the type and return an address instead of just returning the type // we simply allocate the type and return an address instead of just returning the type
const r: *ptrInfo.child = try allocator.create(ptrInfo.child); const r: *ptrInfo.child = try allocator.create(ptrInfo.child);
r.* = try parseInto(ptrInfo.child, allocator, value); r.* = try parseInto(ptrInfo.child, allocator, value);
return r; return r;
}, },
.Slice => switch (value) { .slice => switch (value) {
.array => |array| { .array => |array| {
var arraylist: std.ArrayList(ptrInfo.child) = .init(allocator); var arraylist: std.ArrayList(ptrInfo.child) = .init(allocator);
try arraylist.ensureUnusedCapacity(array.len); try arraylist.ensureUnusedCapacity(array.len);
@ -1146,7 +1146,7 @@ pub fn parseInto(comptime T: type, allocator: mem.Allocator, value: JsonType) Er
const item = try parseInto(ptrInfo.child, allocator, jsonval); const item = try parseInto(ptrInfo.child, allocator, jsonval);
arraylist.appendAssumeCapacity(item); arraylist.appendAssumeCapacity(item);
} }
if (ptrInfo.sentinel) |some| { if (ptrInfo.sentinel()) |some| {
const sentinel = @as(*align(1) const ptrInfo.child, @ptrCast(some)).*; const sentinel = @as(*align(1) const ptrInfo.child, @ptrCast(some)).*;
return try arraylist.toOwnedSliceSentinel(sentinel); return try arraylist.toOwnedSliceSentinel(sentinel);
} }
@ -1160,7 +1160,7 @@ pub fn parseInto(comptime T: type, allocator: mem.Allocator, value: JsonType) Er
for (string) |char| for (string) |char|
arraylist.appendAssumeCapacity(char); arraylist.appendAssumeCapacity(char);
if (ptrInfo.sentinel) |some| { if (ptrInfo.sentinel_ptr) |some| {
const sentinel = @as(*align(1) const ptrInfo.child, @ptrCast(some)).*; const sentinel = @as(*align(1) const ptrInfo.child, @ptrCast(some)).*;
return try arraylist.toOwnedSliceSentinel(sentinel); return try arraylist.toOwnedSliceSentinel(sentinel);
} }

View File

@ -33,7 +33,7 @@ pub fn Partial(comptime T: type) type {
const aligned_ptr: *align(field.alignment) const anyopaque = @alignCast(@ptrCast(&default_value)); const aligned_ptr: *align(field.alignment) const anyopaque = @alignCast(@ptrCast(&default_value));
const optional_field: [1]std.builtin.Type.StructField = [_]std.builtin.Type.StructField{.{ const optional_field: [1]std.builtin.Type.StructField = [_]std.builtin.Type.StructField{.{
.alignment = field.alignment, .alignment = field.alignment,
.default_value = aligned_ptr, .default_value_ptr = aligned_ptr,
.is_comptime = false, .is_comptime = false,
.name = field.name, .name = field.name,
.type = optional_type, .type = optional_type,