1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
package cmdutils
import (
"errors"
"fmt"
"github.com/AlecAivazis/survey/v2/terminal"
"github.com/spf13/cobra"
)
// FlagError is the kind of error raised in flag processing
type FlagError struct {
Err error
}
func (fe FlagError) Error() string {
return fe.Err.Error()
}
func (fe FlagError) Unwrap() error {
return fe.Err
}
// SilentError is an error that triggers exit Code 1 without any error messaging
var SilentError = errors.New("SilentError")
type ExitError struct {
Err error
Code int
Details string
}
func WrapErrorWithCode(err error, code int, details string) *ExitError {
return &ExitError{
Err: err,
Code: code,
Details: details,
}
}
func WrapError(err error, log string) *ExitError {
return WrapErrorWithCode(err, 1, log)
}
func CancelError(log ...interface{}) error {
if len(log) < 1 {
return WrapErrorWithCode(terminal.InterruptErr, 2, "action cancelled")
}
return WrapErrorWithCode(terminal.InterruptErr, 2, fmt.Sprint(log...))
}
func (e *ExitError) Error() string {
return e.Err.Error()
}
func (e ExitError) Unwrap() error {
return e.Err
}
func MinimumArgs(n int, msg string) cobra.PositionalArgs {
if msg == "" {
return cobra.MinimumNArgs(1)
}
return func(cmd *cobra.Command, args []string) error {
if len(args) < n {
return &FlagError{Err: errors.New(msg)}
}
return nil
}
}
|