func (d *Dispatcher) SmartUsage(ctx context.Context, node CommandNode) CommandNodeStringMap {
	result := NewCommandNodeStringMap()
	optional := node.Command() != nil
	node.ChildrenOrdered().Range(func(_ string, child CommandNode) bool {
		usage := d.smartUsage(ctx, child, optional, false)
		if usage != "" {
			result.Put(child, usage)
		}
		return true
	})
	return result
}
SmartUsage gets the possible executable commands from a specified node.

You may use Dispatcher.Root as a target to get usage data for the entire command tree.

The returned syntax will be in "smart" form: <param>, literal, [optional] and (either|or).
These forms may be mixed and matched to provide as much information about the child nodes as it can, without being too verbose.
For example, a required literal "foo" followed by an optional param "int" can be compressed into one string:
foo [<int>]

The path to the specified node will NOT be prepended to the output, as there can theoretically be many
ways to reach a given node. It will only give you paths relative to the specified node, not absolute from root.

The returned usage will be restricted to only commands that the provided context.Context can use.
package brigodier
import (
	"bytes"
	"context"
)
func (d *Dispatcher) AllUsage(ctx context.Context, node CommandNode, restricted bool) []string {
	return d.allUsage(ctx, node, nil, "", restricted)
}
func (d *Dispatcher) allUsage(ctx context.Context, node CommandNode, result []string, prefix string, restricted bool) []string {
	if restricted && !node.CanUse(ctx) {
		return result
	}
	if node.Command() != nil {
		result = append(result, prefix)
	}
	b := new(bytes.Buffer)
	if node.Redirect() != nil {
		if prefix == "" {
			b.WriteString(node.UsageText())
		} else {
			b.WriteString(prefix)
		}
		b.WriteRune(ArgumentSeparator)
		if node.Redirect() == &d.Root {
			b.WriteString("...")
		} else {
			b.WriteString("-> ")
			b.WriteString(node.Redirect().UsageText())
		}
		result = append(result, b.String())
	} else {  
		node.ChildrenOrdered().Range(func(_ string, child CommandNode) bool {
			b.Reset()
			if prefix != "" {
				b.WriteString(prefix)
				b.WriteRune(ArgumentSeparator)
			}
			b.WriteString(child.UsageText())
			result = d.allUsage(ctx, child, result, b.String(), restricted)
			return true
		})
	}
	return result
}
const (
	UsageOptionalOpen rune = '['
	UsageOptionalClose rune = ']'
	UsageRequiredOpen rune = '('
	UsageRequiredClose rune = ')'
	UsageOr rune = '|'
)