You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
// Package reflection helps Marshalling/Unmarshalling data to structs
|
|
|
|
package reflection
|
|
|
|
|
|
|
|
import (
|
|
|
|
"reflect"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Reflection provides Marshalling/Unmarshalling oriented view
|
|
|
|
// of a value
|
|
|
|
type Reflection struct {
|
|
|
|
v reflect.Value
|
|
|
|
}
|
|
|
|
|
|
|
|
// Value returns the object it reflects
|
|
|
|
func (r *Reflection) Value() any {
|
|
|
|
return r.v.Interface()
|
|
|
|
}
|
|
|
|
|
|
|
|
// New creates a Reflection of the given pointer
|
|
|
|
func New(v any) (*Reflection, error) {
|
|
|
|
rv := reflect.ValueOf(v)
|
|
|
|
|
|
|
|
if rv.Kind() != reflect.Pointer || rv.IsNil() {
|
|
|
|
err := &InvalidUnmarshalError{Type: rv.Type()}
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
r := &Reflection{
|
|
|
|
v: rv,
|
|
|
|
}
|
|
|
|
|
|
|
|
if err := r.scan(); err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return r, nil
|
|
|
|
}
|