From b5eaeac11ab2dac0a6025c1666d5070fb64bff2e Mon Sep 17 00:00:00 2001 From: Ophestra Date: Sat, 22 Feb 2025 20:21:57 +0900 Subject: [PATCH] command: declare command interface Signed-off-by: Ophestra --- command/command.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 command/command.go diff --git a/command/command.go b/command/command.go new file mode 100644 index 0000000..79833b3 --- /dev/null +++ b/command/command.go @@ -0,0 +1,34 @@ +// Package command implements generic nested command parsing. +package command + +import "flag" + +type ( + // HandlerFunc is called when matching a directly handled subcommand tree. + HandlerFunc = func(args []string) error + + // LogFunc is the function signature of a printf function. + LogFunc = func(format string, a ...any) + + // FlagDefiner is a deferred flag definer value, usually encapsulating the default value. + FlagDefiner interface { + // Define defines the flag in set. + Define(set *flag.FlagSet, p any, name, usage string) + } + + Command interface { + Parse(arguments []string) error + baseNode[Command] + } + Node baseNode[Node] + + baseNode[T any] interface { + // Command appends a subcommand with direct command handling. + Command(name, usage string, f HandlerFunc) T + // Flag defines a generic flag type in Node's flag set. + Flag(p any, name string, value FlagDefiner, usage string) T + + // New returns a new subcommand tree. + New(name, usage string) (sub Node) + } +)