package reflection import ( "bytes" "fmt" "reflect" ) // An InvalidUnmarshalError describes an invalid argument passed to New. // (It must be a non-nil pointer.) type InvalidUnmarshalError struct { Method string Prefix string reflect.Type } func (e *InvalidUnmarshalError) Error() string { var buf bytes.Buffer if e.Prefix != "" { _, _ = fmt.Fprintf(&buf, "%s: ", e.Prefix) } method := e.Method if method == "" { method = "New" } _, _ = fmt.Fprintf(&buf, "%s(", method) switch { case e.Type == nil: _, _ = buf.WriteString("nil") case e.Type.Kind() != reflect.Pointer: _, _ = fmt.Fprintf(&buf, "%s %s", "non-pointer", e.Type.String()) default: _, _ = fmt.Fprintf(&buf, "%s %s", "nil", e.Type.String()) } _, _ = buf.WriteString(")") 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() }