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 {
|
fn InterfaceCreator(comptime Command: type) type {
|
||||||
return if (Command.ICC.InputType()) |Type|
|
return if (Command.ICC.InputType()) |Type|
|
||||||
struct {
|
struct {
|
||||||
@ -329,6 +344,12 @@ pub fn CommandBuilder(comptime UserContext: type) type {
|
|||||||
return self.param_spec.realTuple();
|
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 {
|
pub fn CallbackSignature(comptime self: @This()) type {
|
||||||
return *const fn (UserContextType, self.Output()) anyerror!void;
|
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 parser = @import("./parser.zig");
|
||||||
|
|
||||||
pub const CommandBuilder = command.CommandBuilder;
|
pub const CommandBuilder = command.CommandBuilder;
|
||||||
|
pub const commandGroup = command.commandGroup;
|
||||||
pub const ParserInterface = parser.ParserInterface;
|
pub const ParserInterface = parser.ParserInterface;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user