Alejandro Mery
1 year ago
1 changed files with 44 additions and 0 deletions
@ -0,0 +1,44 @@
|
||||
package reflective |
||||
|
||||
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() |
||||
} |
Loading…
Reference in new issue