@cryptotaxi247 / kubo / commits / 098edb306

add s3 datastore

Brian Tiger Chow committed Feb 6, 2015 at 07:49 UTC 098edb306f61b0fde1ec2371f1581ca5f4af272e
1 file changed +45
thirdparty/s3-datastore/foo.go new
+45
@@ -0,0 +1,45 @@
1 +package s3datastore
2 +
3 +import (
4 + "errors"
5 +
6 + "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/crowdmob/goamz/s3"
7 + datastore "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-datastore"
8 + query "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/go-datastore/query"
9 +)
10 +
11 +var _ datastore.Datastore = &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 +}