github.com/cspotcode/docker-cli@v20.10.0-rc1.0.20201201121459-3faad7acc5b8+incompatible/cli-plugins/manager/error.go (about)

     1  package manager
     2  
     3  import (
     4  	"github.com/pkg/errors"
     5  )
     6  
     7  // pluginError is set as Plugin.Err by NewPlugin if the plugin
     8  // candidate fails one of the candidate tests. This exists primarily
     9  // to implement encoding.TextMarshaller such that rendering a plugin as JSON
    10  // (e.g. for `docker info -f '{{json .CLIPlugins}}'`) renders the Err
    11  // field as a useful string and not just `{}`. See
    12  // https://github.com/golang/go/issues/10748 for some discussion
    13  // around why the builtin error type doesn't implement this.
    14  type pluginError struct {
    15  	cause error
    16  }
    17  
    18  // Error satisfies the core error interface for pluginError.
    19  func (e *pluginError) Error() string {
    20  	return e.cause.Error()
    21  }
    22  
    23  // Cause satisfies the errors.causer interface for pluginError.
    24  func (e *pluginError) Cause() error {
    25  	return e.cause
    26  }
    27  
    28  // Unwrap provides compatibility for Go 1.13 error chains.
    29  func (e *pluginError) Unwrap() error {
    30  	return e.cause
    31  }
    32  
    33  // MarshalText marshalls the pluginError into a textual form.
    34  func (e *pluginError) MarshalText() (text []byte, err error) {
    35  	return []byte(e.cause.Error()), nil
    36  }
    37  
    38  // wrapAsPluginError wraps an error in a pluginError with an
    39  // additional message, analogous to errors.Wrapf.
    40  func wrapAsPluginError(err error, msg string) error {
    41  	return &pluginError{cause: errors.Wrap(err, msg)}
    42  }
    43  
    44  // NewPluginError creates a new pluginError, analogous to
    45  // errors.Errorf.
    46  func NewPluginError(msg string, args ...interface{}) error {
    47  	return &pluginError{cause: errors.Errorf(msg, args...)}
    48  }