GoCollections/exceptions/PackageException.go

50 lines
888 B
Go
Raw Normal View History

2021-07-06 14:32:01 +08:00
package exceptions
2022-03-31 01:22:30 +08:00
import (
"fmt"
"reflect"
)
2021-07-06 14:32:01 +08:00
type PackageException struct {
RuntimeException
2022-03-23 10:15:18 +08:00
err any
2021-07-06 14:32:01 +08:00
}
2022-03-31 01:22:30 +08:00
func NewPackageException(err any, config *ExceptionConfig) *PackageException {
message := ""
switch e := err.(type) {
case error:
message = e.Error()
default:
message = fmt.Sprint(e)
}
t := reflect.TypeOf(err)
message = fmt.Sprintf("%s (%s)", message, t.Name())
2021-07-06 14:32:01 +08:00
return &PackageException{
2022-04-02 15:25:35 +08:00
RuntimeException: NewRuntimeException(message, config.AddSkipStack(1).
SetExceptionName("github.com.tursom.GoCollections.exceptions.PackageException")),
err: err,
2021-07-06 14:32:01 +08:00
}
}
2022-03-23 10:15:18 +08:00
func (p *PackageException) Err() any {
2021-07-06 14:32:01 +08:00
return p.err
}
2022-03-23 10:15:18 +08:00
func UnpackException(err any) any {
2021-07-06 14:32:01 +08:00
for err != nil {
2022-04-23 11:53:41 +08:00
switch e := err.(type) {
2021-07-06 14:32:01 +08:00
case *PackageException:
2022-04-23 11:53:41 +08:00
return e.Err()
2021-07-06 14:32:01 +08:00
case Exception:
2022-04-23 11:53:41 +08:00
err = e.Cause()
if err == nil {
return e
}
2021-07-06 14:32:01 +08:00
default:
return err
}
}
return nil
}