From ae21c200afe7efdde450426264fba02cf5c2a9a2 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..b4892a2 --- /dev/null +++ b/command/command.go @@ -0,0 +1,34 @@ +// Package command implements generic nested command parsing. +package command + +import "flag" + +type ( + // Handler is called when matching a directly handled subcommand tree. + Handler = 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 Handler) 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) + } +)