github.com/cli/cli@v1.14.1-0.20210902173923-1af6a669e342/pkg/cmdutil/errors.go (about)

     1  package cmdutil
     2  
     3  import (
     4  	"errors"
     5  
     6  	"github.com/AlecAivazis/survey/v2/terminal"
     7  )
     8  
     9  // FlagError is the kind of error raised in flag processing
    10  type FlagError struct {
    11  	Err error
    12  }
    13  
    14  func (fe FlagError) Error() string {
    15  	return fe.Err.Error()
    16  }
    17  
    18  func (fe FlagError) Unwrap() error {
    19  	return fe.Err
    20  }
    21  
    22  // SilentError is an error that triggers exit code 1 without any error messaging
    23  var SilentError = errors.New("SilentError")
    24  
    25  // CancelError signals user-initiated cancellation
    26  var CancelError = errors.New("CancelError")
    27  
    28  func IsUserCancellation(err error) bool {
    29  	return errors.Is(err, CancelError) || errors.Is(err, terminal.InterruptErr)
    30  }
    31  
    32  func MutuallyExclusive(message string, conditions ...bool) error {
    33  	numTrue := 0
    34  	for _, ok := range conditions {
    35  		if ok {
    36  			numTrue++
    37  		}
    38  	}
    39  	if numTrue > 1 {
    40  		return &FlagError{Err: errors.New(message)}
    41  	}
    42  	return nil
    43  }