Documentation
¶
Overview ¶
Package app provides application primitives.
Index ¶
- Constants
- func Args(argList ArgContainer) []string
- func CacheDirPath(envContainer EnvContainer) (string, error)
- func ConfigDirPath(envContainer EnvContainer) (string, error)
- func DataDirPath(envContainer EnvContainer) (string, error)
- func Environ(envContainer EnvContainer) []string
- func EnvironMap(envContainer EnvContainer) map[string]string
- func GetExitCode(err error) int
- func HomeDirPath(envContainer EnvContainer) (string, error)
- func IsDevNull(path string) bool
- func IsDevStderr(path string) bool
- func IsDevStdin(path string) bool
- func IsDevStdout(path string) bool
- func Main(ctx context.Context, f func(context.Context, Container) error)
- func NewError(exitCode int, message string) error
- func NewErrorf(exitCode int, format string, args ...interface{}) error
- func Run(ctx context.Context, container Container, ...) error
- type ArgContainer
- type Container
- type EnvContainer
- type EnvStderrContainer
- type EnvStdinContainer
- type EnvStdioContainer
- type EnvStdoutContainer
- type StderrContainer
- type StdinContainer
- type StdioContainer
- type StdoutContainer
Constants ¶
const ( // DevStdinFilePath is the equivalent of /dev/stdin. // // This will be /dev/stdin for darwin and linux. // This does not exist for windows. DevStdinFilePath = "/dev/stdin" // DevStdoutFilePath is the equivalent of /dev/stdout. // // This will be /dev/stdout for darwin and linux. // This does not exist for windows. DevStdoutFilePath = "/dev/stdout" // DevStderrFilePath is the equivalent of /dev/stderr. // // This will be /dev/stderr for darwin and linux. // This does not exist for windows. DevStderrFilePath = "/dev/stderr" // DevNullFilePath is the equivalent of /dev/null. // // This will be /dev/null for darwin and linux. // This will be nul for windows. DevNullFilePath = "/dev/null" )
Variables ¶
This section is empty.
Functions ¶
func Args ¶
func Args(argList ArgContainer) []string
Args returns all arguments.
Equivalent to os.Args.
func CacheDirPath ¶
func CacheDirPath(envContainer EnvContainer) (string, error)
CacheDirPath returns the cache directory path.
This will be $XDG_CACHE_HOME for darwin and linux, falling back to $HOME/.cache. This will be %LocalAppData% for windows.
See https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html for darwin and linux. Note that we use the same for darwin and linux as this is what developers expect, as opposed to ~/Library/Preferences etc as the stdlib does for Go.
Users cannot assume that CacheDirPath, ConfigDirPath, and DataDirPath are unique.
func ConfigDirPath ¶
func ConfigDirPath(envContainer EnvContainer) (string, error)
ConfigDirPath returns the config directory path.
This will be $XDG_CONFIG_HOME for darwin and linux, falling back to $HOME/.config. This will be %AppData% for windows.
See https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html for darwin and linux. Note that we use the same for darwin and linux as this is what developers expect, as opposed to ~/Library/Preferences etc as the stdlib does for Go.
Users cannot assume that CacheDirPath, ConfigDirPath, and DataDirPath are unique.
func DataDirPath ¶
func DataDirPath(envContainer EnvContainer) (string, error)
DataDirPath returns the data directory path.
This will be $XDG_DATA_HOME for darwin and linux, falling back to $HOME/.local/share. This will be %LocalAppData% for windows.
See https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html for darwin and linux. Note that we use the same for darwin and linux as this is what developers expect, as opposed to ~/Library/Preferences etc as the stdlib does for Go.
Users cannot assume that CacheDirPath, ConfigDirPath, and DataDirPath are unique.
func Environ ¶
func Environ(envContainer EnvContainer) []string
Environ returns all environment variables in the form "KEY=VALUE".
Equivalent to os.Enviorn.
Sorted.
func EnvironMap ¶
func EnvironMap(envContainer EnvContainer) map[string]string
EnvironMap returns all environment variables in a map.
No key will have an empty value.
func GetExitCode ¶
GetExitCode gets the exit code.
If err == nil, this returns 0. If err was created by this package, this returns the exit code from the error. Otherwise, this returns 1.
func HomeDirPath ¶
func HomeDirPath(envContainer EnvContainer) (string, error)
HomeDirPath returns the home directory path.
This will be $HOME for darwin and linux. This will be %USERPROFILE% for windows.
func IsDevStderr ¶
IsDevStderr returns true if the path is the equivalent of /dev/stderr.
func IsDevStdin ¶
IsDevStdin returns true if the path is the equivalent of /dev/stdin.
func IsDevStdout ¶
IsDevStdout returns true if the path is the equivalent of /dev/stdout.
func Main ¶
Main runs the application using the OS Container and calling os.Exit on the return value of Run.
Types ¶
type ArgContainer ¶
type ArgContainer interface {
// NumArgs gets the number of arguments.
NumArgs() int
// Arg gets the ith argument.
//
// Panics if i < 0 || i >= Len().
Arg(i int) string
}
ArgContainer provides the arguments.
func NewArgContainer ¶
func NewArgContainer(args ...string) ArgContainer
NewArgContainer returns a new ArgContainer.
func NewArgContainerForOS ¶
func NewArgContainerForOS() ArgContainer
NewArgContainerForOS returns a new ArgContainer for the operating system.
type Container ¶
type Container interface {
EnvContainer
StdinContainer
StdoutContainer
StderrContainer
ArgContainer
}
Container contains environment variables, args, and stdio.
func NewContainer ¶
func NewContainer( env map[string]string, stdin io.Reader, stdout io.Writer, stderr io.Writer, args ...string, ) Container
NewContainer returns a new Container.
func NewContainerForArgs ¶
NewContainerForArgs returns a new Container with the replacement args.
func NewContainerForOS ¶
NewContainerForOS returns a new Container for the operating system.
type EnvContainer ¶
type EnvContainer interface {
// Env gets the environment variable value for the key.
//
// Returns empty string if the key is not set or the value is empty.
Env(key string) string
// ForEachEnv iterates over all non-empty environment variables and calls the function.
//
// The value will never be empty.
ForEachEnv(func(string, string))
}
EnvContainer provides envionment variables.
func NewEnvContainer ¶
func NewEnvContainer(m map[string]string) EnvContainer
NewEnvContainer returns a new EnvContainer.
Empty values are effectively ignored.
func NewEnvContainerForOS ¶
func NewEnvContainerForOS() (EnvContainer, error)
NewEnvContainerForOS returns a new EnvContainer for the operating system.
func NewEnvContainerWithOverrides ¶
func NewEnvContainerWithOverrides(envContainer EnvContainer, overrides map[string]string) EnvContainer
NewEnvContainerWithOverrides returns a new EnvContainer with the values of the input EnvContainer, overridden by the values in overrides.
Empty values are effectively ignored. To unset a key, set the value to "" in overrides.
type EnvStderrContainer ¶
type EnvStderrContainer interface {
EnvContainer
StderrContainer
}
EnvStderrContainer is an environment and stderr container.
type EnvStdinContainer ¶
type EnvStdinContainer interface {
EnvContainer
StdinContainer
}
EnvStdinContainer is an environment and stdin container.
type EnvStdioContainer ¶
type EnvStdioContainer interface {
EnvContainer
StdioContainer
}
EnvStdioContainer is an environment and stdio container.
type EnvStdoutContainer ¶
type EnvStdoutContainer interface {
EnvContainer
StdoutContainer
}
EnvStdoutContainer is an environment and stdout container.
type StderrContainer ¶
type StderrContainer interface {
// Stderr provides stderr.
//
// If no value was passed when Stdio was created, this will return io.EOF on any call.
Stderr() io.Writer
}
StderrContainer provides stderr.
func NewStderrContainer ¶
func NewStderrContainer(writer io.Writer) StderrContainer
NewStderrContainer returns a new StderrContainer.
func NewStderrContainerForOS ¶
func NewStderrContainerForOS() StderrContainer
NewStderrContainerForOS returns a new StderrContainer for the operaterrg system.
type StdinContainer ¶
type StdinContainer interface {
// Stdin provides stdin.
//
// If no value was passed when Stdio was created, this will return io.EOF on any call.
Stdin() io.Reader
}
StdinContainer provides stdin.
func NewStdinContainer ¶
func NewStdinContainer(reader io.Reader) StdinContainer
NewStdinContainer returns a new StdinContainer.
func NewStdinContainerForOS ¶
func NewStdinContainerForOS() StdinContainer
NewStdinContainerForOS returns a new StdinContainer for the operating system.
type StdioContainer ¶
type StdioContainer interface {
StdinContainer
StdoutContainer
StderrContainer
}
StdioContainer is a stdio container.
type StdoutContainer ¶
type StdoutContainer interface {
// Stdout provides stdout.
//
// If no value was passed when Stdio was created, this will return io.EOF on any call.
Stdout() io.Writer
}
StdoutContainer provides stdout.
func NewStdoutContainer ¶
func NewStdoutContainer(writer io.Writer) StdoutContainer
NewStdoutContainer returns a new StdoutContainer.
func NewStdoutContainerForOS ¶
func NewStdoutContainerForOS() StdoutContainer
NewStdoutContainerForOS returns a new StdoutContainer for the operatoutg system.
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
Package appcmd contains helper functionality for applications using commands.
|
Package appcmd contains helper functionality for applications using commands. |
|
Package appflag contains functionality to work with flags.
|
Package appflag contains functionality to work with flags. |
|
Package applog contains utilities to work with logging.
|
Package applog contains utilities to work with logging. |
|
Package appname provides containers for named applications.
|
Package appname provides containers for named applications. |
|
Package appproto contains helper functionality for protoc plugins.
|
Package appproto contains helper functionality for protoc plugins. |
|
appprotoexec
Package appprotoexec provides protoc plugin handling and execution.
|
Package appprotoexec provides protoc plugin handling and execution. |
|
appprotoos
Package appprotoos does OS-specific generation.
|
Package appprotoos does OS-specific generation. |