// 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 }