Files

35 lines
891 B
Go

// Package configdiag carries value-free field diagnostics between framework
// modules without making them depend on the application's config package.
package configdiag
import "errors"
type Error struct {
Field, Reason string
cause error
}
func (e *Error) Error() string { return e.Field + ": " + e.Reason }
func (e *Error) Unwrap() error { return e.cause }
func New(field, reason string) error { return &Error{Field: field, Reason: reason} }
func Wrap(field, reason string, cause error) error {
return &Error{Field: field, Reason: reason, cause: cause}
}
func At(prefix string, err error) error {
if err == nil {
return nil
}
var d *Error
if errors.As(err, &d) {
field := prefix
if d.Field != "" {
if field != "" {
field += "."
}
field += d.Field
}
return Wrap(field, d.Reason, err)
}
return Wrap(prefix, "validation failed", err)
}