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