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
+}