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