diff --git a/reflection/reflection.go b/reflection/reflection.go index 725c207..7b401af 100644 --- a/reflection/reflection.go +++ b/reflection/reflection.go @@ -1,2 +1,35 @@ // Package reflection helps Marshalling/Unmarshalling data to structs package reflection + +import ( + "reflect" +) + +// Reflection provides Marshalling/Unmarshalling oriented view +// of a value +type Reflection[T any] struct { + v reflect.Value +} + +// Value returns the object it reflects +func (r *Reflection[T]) Value() *T { + return r.v.Interface().(*T) +} + +// New creates a Reflection of the given pointer +func New[T any](v *T) (*Reflection[T], error) { + if v == nil { + err := &InvalidUnmarshalError{Type: reflect.TypeOf(v)} + return nil, err + } + + r := &Reflection[T]{ + v: reflect.ValueOf(v), + } + + if err := r.scan(); err != nil { + return nil, err + } + + return r, nil +} diff --git a/reflection/scan.go b/reflection/scan.go new file mode 100644 index 0000000..9f67b90 --- /dev/null +++ b/reflection/scan.go @@ -0,0 +1,5 @@ +package reflection + +func (*Reflection[T]) scan() error { + return nil +}