Files
2025-04-25 11:20:31 +03:00

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())
}
}