61 lines
1.0 KiB
Go
61 lines
1.0 KiB
Go
package reedsolomon
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
errors "golang.org/x/xerrors"
|
|
)
|
|
|
|
type ReedSolomonException interface {
|
|
error
|
|
reedSolomonException()
|
|
}
|
|
|
|
type reedSolomonException struct {
|
|
msg string
|
|
next error
|
|
frame errors.Frame
|
|
}
|
|
|
|
func (reedSolomonException) reedSolomonException() {}
|
|
|
|
func (e reedSolomonException) Error() string {
|
|
return e.msg
|
|
}
|
|
|
|
func (e reedSolomonException) Unwrap() error {
|
|
return e.next
|
|
}
|
|
|
|
func (e reedSolomonException) Format(s fmt.State, v rune) {
|
|
errors.FormatError(e, s, v)
|
|
}
|
|
|
|
func (e reedSolomonException) FormatError(p errors.Printer) error {
|
|
p.Print(e.msg)
|
|
e.frame.Format(p)
|
|
return e.next
|
|
}
|
|
|
|
func NewReedSolomonException(msg string) ReedSolomonException {
|
|
return reedSolomonException{
|
|
"ReedSolomonException: " + msg,
|
|
nil,
|
|
errors.Caller(1),
|
|
}
|
|
}
|
|
|
|
func WrapReedSolomonException(err error) ReedSolomonException {
|
|
msg := err.Error()
|
|
if !strings.HasPrefix(msg, "ReedSolomonException") {
|
|
msg = "ReedSolomonException: " + msg
|
|
}
|
|
|
|
return reedSolomonException{
|
|
msg,
|
|
err,
|
|
errors.Caller(1),
|
|
}
|
|
}
|