Remove Message interface (#39)
Replace Message with a Format method on cause. This simplifies Fprint as
well as removing one interface method from Wrap/Wrapf error impls.
diff --git a/errors.go b/errors.go
index e1232df..219df86 100644
--- a/errors.go
+++ b/errors.go
@@ -83,13 +83,25 @@
}
type cause struct {
- cause error
- message string
+ cause error
+ msg string
}
-func (c cause) Error() string { return c.Message() + ": " + c.Cause().Error() }
-func (c cause) Cause() error { return c.cause }
-func (c cause) Message() string { return c.message }
+func (c cause) Error() string { return fmt.Sprintf("%v", c) }
+func (c cause) Cause() error { return c.cause }
+
+func (c cause) Format(s fmt.State, verb rune) {
+ switch verb {
+ case 'v':
+ if s.Flag('+') {
+ io.WriteString(s, c.msg)
+ return
+ }
+ fallthrough
+ case 's':
+ fmt.Fprintf(s, "%s: %v", c.msg, c.Cause())
+ }
+}
// Wrap returns an error annotating err with message.
// If err is nil, Wrap returns nil.
@@ -102,8 +114,8 @@
*stack
}{
cause{
- cause: err,
- message: message,
+ cause: err,
+ msg: message,
},
callers(),
}
@@ -120,8 +132,8 @@
*stack
}{
cause{
- cause: err,
- message: fmt.Sprintf(format, args...),
+ cause: err,
+ msg: fmt.Sprintf(format, args...),
},
callers(),
}
@@ -170,9 +182,6 @@
type stacktrace interface {
Stacktrace() []Frame
}
- type message interface {
- Message() string
- }
for err != nil {
switch err := err.(type) {
@@ -182,12 +191,7 @@
default:
// de nada
}
- switch err := err.(type) {
- case message:
- fmt.Fprintln(w, err.Message())
- default:
- fmt.Fprintln(w, err.Error())
- }
+ fmt.Fprintf(w, "%+v\n", err)
cause, ok := err.(causer)
if !ok {