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() {}