errors

package
v0.0.0-...-436d200 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 23, 2023 License: BSD-3-Clause Imports: 5 Imported by: 821

Documentation

Overview

This module implements functions which manipulate errors and provide stack trace information.

NOTE: This package intentionally mirrors the standard "errors" module. All dropbox code should use this.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func FindWrappedError

func FindWrappedError(
	topErr error,
	classifier func(curErr, topErr error) error,
) (error, bool)

Performs a deep check of wrapped errors to find one which is selected by the given classifier func. The classifer is called on all non-nil errors found, starting with topErr, then on each inner wrapped error in turn until it returns non-nil which ends the scan. If the classifier ever returns a non-nil error, it will be returned from this function along with `true` to indicate something was found. Otherwise this function will return `topErr, false`.

func GetMessage

func GetMessage(err interface{}) string

This returns the error string without stack trace information.

func IsError

func IsError(err, errConst error) bool

Perform a deep check, unwrapping errors as much as possilbe and comparing the string version of the error.

func RootError

func RootError(ierr error) (nerr error)

Keep peeling away layers or context until a primitive error is revealed.

Types

type DropboxError

type DropboxError interface {
	// This returns the error message without the stack trace.
	GetMessage() string

	// This returns the wrapped error or nil if this error does not wrap another error per the
	// Go 2 error introspection proposal:
	// https://go.googlesource.com/proposal/+/master/design/29934-error-values.md
	Unwrap() error

	// Implements the built-in error interface.
	Error() string

	// Returns stack addresses as a string that can be supplied to
	// a helper tool to get the actual stack trace. This function doesn't result
	// in resolving full stack frames thus is a lot more efficient.
	StackAddrs() string

	// Returns stack frames.
	StackFrames() []runtime.Frame

	// Returns string representation of stack frames.
	// Stack frame formatting looks generally something like this:
	// dropbox/legacy_rpc.(*clientV4).Do
	//   /srv/server/go/src/dropbox/legacy_rpc/client.go:87 +0xbf9
	// dropbox/exclog.Report
	//   /srv/server/go/src/dropbox/exclog/client.go:129 +0x9e5
	// main.main
	//   /home/cdo/tmp/report_exception.go:13 +0x84
	// It is discouraged to parse stack frames using string parsing since it can change at any time.
	// Use StackFrames() function instead to get actual stack frame metadata.
	GetStack() string
}

This interface exposes additional information about the error.

func New

func New(msg string) DropboxError

This returns a new baseError initialized with the given message and the current stack trace.

func Newf

func Newf(format string, args ...interface{}) DropboxError

Same as New, but with fmt.Printf-style parameters.

func RootDropboxError

func RootDropboxError(dbxErr DropboxError) DropboxError

Return the lowest-level DropboxError. This can be used when reporting the stack of the original exception to try and get the most relevant stack instead of the highest level stack.

func Wrap

func Wrap(err error, msg string) DropboxError

Wraps another error in a new baseError.

func Wrapf

func Wrapf(err error, format string, args ...interface{}) DropboxError

Same as Wrap, but with fmt.Printf-style parameters.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL