From 098edb306f61b0fde1ec2371f1581ca5f4af272e Mon Sep 17 00:00:00 2001 From: Brian Tiger Chow <brian.holderchow@gmail.com> Date: Fri, 6 Feb 2015 07:49:04 -0800 Subject: [PATCH] add s3 datastore --- thirdparty/s3-datastore/foo.go | 45 ++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) create mode 100644 thirdparty/s3-datastore/foo.go diff --git a/thirdparty/s3-datastore/foo.go b/thirdparty/s3-datastore/foo.go new file mode 100644 index 000000000..0f3562356 --- /dev/null +++ b/thirdparty/s3-datastore/foo.go @@ -0,0 +1,45 @@ +package s3datastore + +import ( + "errors" + + "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/crowdmob/goamz/s3" + datastore "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-datastore" + query "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-datastore/query" +) + +var _ datastore.Datastore = &S3Datastore{} + +var errTODO = errors.New("TODO") + +var ErrInvalidType = errors.New("s3 datastore: invalid type error") + +type S3Datastore struct { + Client *s3.S3 + Bucket string +} + +func (ds *S3Datastore) Put(key datastore.Key, value interface{}) (err error) { + data, ok := value.([]byte) + if !ok { + return ErrInvalidType + } + // TODO extract perms and s3 options + return ds.Client.Bucket(ds.Bucket).Put(key.String(), data, "application/protobuf", s3.PublicRead, s3.Options{}) +} + +func (ds *S3Datastore) Get(key datastore.Key) (value interface{}, err error) { + return ds.Client.Bucket(ds.Bucket).Get(key.String()) +} + +func (ds *S3Datastore) Has(key datastore.Key) (exists bool, err error) { + return ds.Client.Bucket(ds.Bucket).Exists(key.String()) +} + +func (ds *S3Datastore) Delete(key datastore.Key) (err error) { + return ds.Client.Bucket(ds.Bucket).Del(key.String()) +} + +func (ds *S3Datastore) Query(q query.Query) (query.Results, error) { + return nil, errors.New("TODO implement query for s3 datastore?") +} -- GitLab