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