func New(URL string, info os.FileInfo, source interface{}) storage.Object {
	linkname := ""
	linkURL := ""
	link, ok := source.(*Link)
	if ok {
		linkname = link.Linkname
		linkURL = link.LinkURL
		source = link.Source
	}
	var result = &Object{
		url:      URL,
		Source:   source,
		linkname: linkname,
		linkURL:  linkURL,
		FileInfo: info,
	}
	return result
}
New creates a new storage object
package object
import (
	"fmt"
	"github.com/viant/afs/storage"
	"os"
	"reflect"
)
type Object struct {
	url      string
	Source   interface{}
	linkname string
	linkURL  string
	os.FileInfo
}
func (o *Object) URL() string {
	return o.url
}
func (o *Object) Linkname() string {
	return o.linkname
}
func (o *Object) LinkURL() string {
	return o.linkURL
}
func (o *Object) Wrap(source interface{}) {
	o.Source = source
}
func (o *Object) Unwrap(target interface{}) error {
	if o.Source == nil {
		return nil
	}
	targetValue := reflect.ValueOf(target)
	sourceValue := reflect.ValueOf(o.Source)
	if sourceValue.Type().AssignableTo(targetValue.Type()) {
		return fmt.Errorf("unable to assign %T to %T", o.Source, target)
	}
	targetValue.Elem().Set(sourceValue)
	return nil
}