github.com/keltia/go-ipfs@v0.3.8-0.20150909044612-210793031c63/thirdparty/s3-datastore/datastore.go (about)

     1  package s3datastore
     2  
     3  import (
     4  	"errors"
     5  
     6  	"github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/crowdmob/goamz/s3"
     7  	datastore "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-datastore"
     8  	query "github.com/ipfs/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-datastore/query"
     9  )
    10  
    11  var _ datastore.ThreadSafeDatastore = &S3Datastore{}
    12  
    13  var errTODO = errors.New("TODO")
    14  
    15  var ErrInvalidType = errors.New("s3 datastore: invalid type error")
    16  
    17  type S3Datastore struct {
    18  	Client *s3.S3
    19  	Bucket string
    20  }
    21  
    22  func (ds *S3Datastore) Put(key datastore.Key, value interface{}) (err error) {
    23  	data, ok := value.([]byte)
    24  	if !ok {
    25  		return ErrInvalidType
    26  	}
    27  	// TODO extract perms and s3 options
    28  	return ds.Client.Bucket(ds.Bucket).Put(key.String(), data, "application/protobuf", s3.PublicRead, s3.Options{})
    29  }
    30  
    31  func (ds *S3Datastore) Get(key datastore.Key) (value interface{}, err error) {
    32  	return ds.Client.Bucket(ds.Bucket).Get(key.String())
    33  }
    34  
    35  func (ds *S3Datastore) Has(key datastore.Key) (exists bool, err error) {
    36  	return ds.Client.Bucket(ds.Bucket).Exists(key.String())
    37  }
    38  
    39  func (ds *S3Datastore) Delete(key datastore.Key) (err error) {
    40  	return ds.Client.Bucket(ds.Bucket).Del(key.String())
    41  }
    42  
    43  func (ds *S3Datastore) Query(q query.Query) (query.Results, error) {
    44  	return nil, errors.New("TODO implement query for s3 datastore?")
    45  }
    46  
    47  func (ds *S3Datastore) IsThreadSafe() {}