From 70cc191c4a704bfa7fac477babb70f5a4d6890e5 Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Thu, 6 Nov 2025 18:13:52 +0100 Subject: [PATCH] refactor: add support for delayed registering of command collections --- src/command.zig | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/command.zig b/src/command.zig index bc5ebcb..82d097b 100644 --- a/src/command.zig +++ b/src/command.zig @@ -288,15 +288,31 @@ pub fn Collection(comptime Namespace: type) type { const Self = @This(); pub fn init(self: *Self, targetPtr: *Target) !void { + if (cmds.len == 0) + @compileError("no commands found in type " ++ @typeName(Target) ++ " (did you mark them public?)"); + inline for (cmds) |cmd| + @field(self.fields, cmd.name) = Closure(*Target).init(cmd.f, targetPtr, cmd.name, cmd.meta); + try self.register(); + } + + pub fn init_unregistered(self: *Self, targetPtr: *Target) void { if (cmds.len == 0) @compileError("no commands found in type " ++ @typeName(Target) ++ " (did you mark them public?)"); inline for (cmds) |cmd| { @field(self.fields, cmd.name) = Closure(*Target).init(cmd.f, targetPtr, cmd.name, cmd.meta); - try @field(self.fields, cmd.name).register(); } } pub fn deinit(self: *Self) void { + self.unregister(); + } + + pub fn register(self: *Self) !void { + inline for (cmds) |cmd| + try @field(self.fields, cmd.name).register(); + } + + pub fn unregister(self: *Self) void { inline for (cmds) |cmd| Closure(*Target).unregister(&@field(self.fields, cmd.name)); }