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  }