48 lines
995 B
Go
48 lines
995 B
Go
package errors
|
|
|
|
import (
|
|
"io"
|
|
"strings"
|
|
)
|
|
|
|
func ErrorToString(e error) string {
|
|
builder := &strings.Builder{}
|
|
AppendError(builder, e, 0)
|
|
return builder.String()
|
|
}
|
|
|
|
func AppendError(writer io.StringWriter, err error, depth uint) {
|
|
padding := strings.Repeat(" ", int(depth))
|
|
|
|
var uniError UniverseError
|
|
if As(err, &uniError) {
|
|
errorType := uniError.Type()
|
|
if errorType != nil {
|
|
_, _ = writer.WriteString(errorType.Name)
|
|
_, _ = writer.WriteString(": ")
|
|
}
|
|
|
|
_, _ = writer.WriteString(uniError.Message())
|
|
|
|
stack := uniError.StackTrace()
|
|
if stack != nil {
|
|
for _, value := range stack {
|
|
_, _ = writer.WriteString("\n")
|
|
_, _ = writer.WriteString(padding)
|
|
_, _ = writer.WriteString(value)
|
|
}
|
|
}
|
|
|
|
cause := uniError.Cause()
|
|
if cause != nil {
|
|
_, _ = writer.WriteString("\n")
|
|
_, _ = writer.WriteString(padding)
|
|
_, _ = writer.WriteString("Caused by: ")
|
|
AppendError(writer, cause, depth+1)
|
|
}
|
|
|
|
} else {
|
|
_, _ = writer.WriteString(err.Error())
|
|
}
|
|
}
|