2016-09-01 20:17:37 +00:00
|
|
|
package errors
|
2016-08-28 20:19:48 +00:00
|
|
|
|
|
|
|
import "fmt"
|
|
|
|
|
|
|
|
// fatalError is an error that should be printed to the user, then the program
|
|
|
|
// should exit with an error code.
|
|
|
|
type fatalError string
|
|
|
|
|
|
|
|
func (e fatalError) Error() string {
|
|
|
|
return string(e)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (e fatalError) Fatal() bool {
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
|
|
|
// Fataler is an error which should be printed to the user directly.
|
|
|
|
// Afterwards, the program should exit with an error.
|
|
|
|
type Fataler interface {
|
|
|
|
Fatal() bool
|
|
|
|
}
|
|
|
|
|
|
|
|
// IsFatal returns true if err is a fatal message that should be printed to the
|
|
|
|
// user. Then, the program should exit.
|
|
|
|
func IsFatal(err error) bool {
|
|
|
|
e, ok := err.(Fataler)
|
|
|
|
return ok && e.Fatal()
|
|
|
|
}
|
|
|
|
|
2016-09-25 16:27:03 +00:00
|
|
|
// Fatal returns a wrapped error which implements the Fataler interface.
|
2016-08-28 20:19:48 +00:00
|
|
|
func Fatal(s string) error {
|
2016-09-25 16:27:03 +00:00
|
|
|
return Wrap(fatalError(s), "Fatal")
|
2016-08-28 20:19:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
// Fatalf returns an error which implements the Fataler interface.
|
|
|
|
func Fatalf(s string, data ...interface{}) error {
|
2018-01-06 22:11:54 +00:00
|
|
|
return Wrap(fatalError(fmt.Sprintf(s, data...)), "Fatal")
|
2016-08-28 20:19:48 +00:00
|
|
|
}
|