command: add commandGroup
function
This just creates an empty command with an auto-assigned noop callback. This is useful sugar for creating a group of commands under a common name because previously the user would have to define their own noop callback and bind it. This just takes a description string (and, optionally, a help flag override).
This commit is contained in:
parent
8ac610ae71
commit
76e8dedf14
@ -72,6 +72,21 @@ fn BuilderGenerics(comptime UserContext: type) type {
|
||||
};
|
||||
}
|
||||
|
||||
pub const GroupOptions = struct {
|
||||
help_flag: ShortLongPair = .{ .short_tag = "-h", .long_tag = "--help" },
|
||||
description: []const u8,
|
||||
};
|
||||
|
||||
pub fn commandGroup(allocator: std.mem.Allocator, comptime options: GroupOptions) !ParserInterface {
|
||||
const cmd = comptime CommandBuilder(void){
|
||||
.help_flag = options.help_flag,
|
||||
.description = options.description,
|
||||
.subcommand_required = true,
|
||||
};
|
||||
|
||||
return try cmd.createInterface(allocator, cmd.noopCallback());
|
||||
}
|
||||
|
||||
fn InterfaceCreator(comptime Command: type) type {
|
||||
return if (Command.ICC.InputType()) |Type|
|
||||
struct {
|
||||
@ -329,6 +344,12 @@ pub fn CommandBuilder(comptime UserContext: type) type {
|
||||
return self.param_spec.realTuple();
|
||||
}
|
||||
|
||||
pub fn noopCallback(comptime self: @This()) self.CallbackSignature() {
|
||||
return struct {
|
||||
fn callback(_: UserContextType, _: self.Output()) !void {}
|
||||
}.callback;
|
||||
}
|
||||
|
||||
pub fn CallbackSignature(comptime self: @This()) type {
|
||||
return *const fn (UserContextType, self.Output()) anyerror!void;
|
||||
}
|
||||
|
@ -7,4 +7,5 @@ pub const parameters = @import("./parameters.zig");
|
||||
pub const parser = @import("./parser.zig");
|
||||
|
||||
pub const CommandBuilder = command.CommandBuilder;
|
||||
pub const commandGroup = command.commandGroup;
|
||||
pub const ParserInterface = parser.ParserInterface;
|
||||
|
Loading…
x
Reference in New Issue
Block a user