diff --git a/reflection/error.go b/reflection/error.go index 814d856..31d66c9 100644 --- a/reflection/error.go +++ b/reflection/error.go @@ -42,3 +42,28 @@ func (e *InvalidUnmarshalError) Error() string { return buf.String() } + +// An UnmarshalTypeError tells something went wrong while processing +// a type. +type UnmarshalTypeError struct { + Prefix string + Err error + + reflect.Type +} + +func (e UnmarshalTypeError) Unwrap() error { + return e.Err +} + +func (e UnmarshalTypeError) Error() string { + var buf bytes.Buffer + + if e.Prefix != "" { + _, _ = fmt.Fprintf(&buf, "%s: ", e.Prefix) + } + + _, _ = fmt.Fprintf(&buf, "%s: %s", e.Type.String(), e.Err) + + return buf.String() +}