github.com/viant/toolbox@v0.34.5/storage/s3/object.go (about) 1 package s3 2 3 import ( 4 "fmt" 5 "github.com/aws/aws-sdk-go/service/s3" 6 "github.com/viant/toolbox/storage" 7 "os" 8 ) 9 10 type object struct { 11 *storage.AbstractObject 12 } 13 14 func (o *object) Unwrap(target interface{}) error { 15 if commonPrefix, casted := target.(**s3.CommonPrefix); casted { 16 source, ok := o.Source.(*s3.CommonPrefix) 17 if !ok { 18 return fmt.Errorf("failed to case %T into %T", o.Source, target) 19 } 20 *commonPrefix = source 21 } 22 if commonPrefix, casted := target.(**s3.Object); casted { 23 source, ok := o.Source.(*s3.Object) 24 if !ok { 25 return fmt.Errorf("failed to case %T into %T", o.Source, target) 26 } 27 *commonPrefix = source 28 } 29 30 return fmt.Errorf("unsuported target %T", target) 31 } 32 33 //newStorageObject creates a new aws storage object 34 func newStorageObject(url string, source interface{}, fileInfo os.FileInfo) storage.Object { 35 abstract := storage.NewAbstractStorageObject(url, source, fileInfo) 36 result := &object{ 37 AbstractObject: abstract, 38 } 39 result.AbstractObject.Object = result 40 return result 41 }