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