66 lines
2.1 KiB
Go
66 lines
2.1 KiB
Go
package commandkit
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
)
|
|
|
|
// Identity describes the application or component represented by CommandKit.
|
|
//
|
|
// Version and Revision are caller supplied metadata. CommandKit does not infer
|
|
// them from an executable or mutate them.
|
|
type Identity struct {
|
|
// Name is the human-readable application or component name.
|
|
Name string
|
|
// Version is the caller-supplied version string.
|
|
Version string
|
|
// Revision is the caller-supplied source revision.
|
|
Revision string
|
|
}
|
|
|
|
// Streams contains the output destinations associated with a command
|
|
// invocation.
|
|
type Streams struct {
|
|
// Out receives help and command reports.
|
|
Out io.Writer
|
|
// Err receives diagnostics and usage guidance.
|
|
Err io.Writer
|
|
}
|
|
|
|
func normalizeStreams(streams Streams) Streams {
|
|
if streams.Out == nil {
|
|
streams.Out = io.Discard
|
|
}
|
|
if streams.Err == nil {
|
|
streams.Err = io.Discard
|
|
}
|
|
return streams
|
|
}
|
|
|
|
// Invocation provides execution context and reporting to a command handler.
|
|
// For command aliases, EnteredPath and CanonicalPath expose the route the
|
|
// caller used and the selected canonical command path. Both omit the
|
|
// executable name, flags, and operands.
|
|
type Invocation struct {
|
|
// Context carries caller cancellation and request-scoped values.
|
|
Context context.Context
|
|
|
|
reporter *Reporter
|
|
enteredPath string
|
|
canonicalPath string
|
|
}
|
|
|
|
// Reporter returns the reporting facility for this invocation.
|
|
func (inv Invocation) Reporter() *Reporter { return inv.reporter }
|
|
|
|
// EnteredPath returns the command path used to invoke the selected command,
|
|
// excluding the executable name, flags, and operands. It is empty for an
|
|
// Invocation that was not created by command execution.
|
|
func (inv Invocation) EnteredPath() string { return inv.enteredPath }
|
|
|
|
// CanonicalPath returns the selected command's canonical path after resolving
|
|
// aliases, excluding the executable name, flags, and operands. It equals
|
|
// EnteredPath for a direct canonical invocation and is empty for an Invocation
|
|
// that was not created by command execution.
|
|
func (inv Invocation) CanonicalPath() string { return inv.canonicalPath }
|