Browse Source

reflection: introduce InvalidUnmarshalError{}

Signed-off-by: Alejandro Mery <amery@jpi.io>
dev-amery-reflect
Alejandro Mery 1 year ago
parent
commit
1e95acf21d
  1. 44
      reflection/error.go
  2. 2
      reflection/reflection.go

44
reflection/error.go

@ -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()
}

2
reflection/reflection.go

@ -0,0 +1,2 @@
// Package reflection helps Marshalling/Unmarshalling data to structs
package reflection
Loading…
Cancel
Save