You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
minio/pkg/storage/storage.go

62 lines
1.4 KiB

package storage
import (
"bytes"
"io"
)
10 years ago
type Storage struct {
data map[string][]byte
}
type ObjectMetadata struct{}
type GenericError struct {
bucket string
path string
}
type ObjectNotFound GenericError
func (self ObjectNotFound) Error() string {
return "Not Found: " + self.bucket + "#" + self.path
}
func (storage *Storage) CopyObjectToWriter(w io.Writer, bucket string, object string) (int64, error) {
// TODO synchronize access
// get object
10 years ago
key := bucket + ":" + object
if val, ok := storage.data[key]; ok {
objectBuffer := bytes.NewBuffer(val)
written, err := io.Copy(w, objectBuffer)
return written, err
10 years ago
} else {
return 0, ObjectNotFound{bucket: bucket, path: object}
10 years ago
}
}
func (storage *Storage) StoreObject(bucket string, object string, data io.Reader) {
key := bucket + ":" + object
var bytesBuffer bytes.Buffer
if _, ok := io.Copy(&bytesBuffer, data); ok == nil {
storage.data[key] = bytesBuffer.Bytes()
}
}
func (storage *Storage) ListObjects(bucket, prefix string, count int) []ObjectMetadata {
return []ObjectMetadata{}
}
func Start() (chan<- string, <-chan error, *Storage) {
ctrlChannel := make(chan string)
errorChannel := make(chan error)
go start(ctrlChannel, errorChannel)
return ctrlChannel, errorChannel, &Storage{
data: make(map[string][]byte),
}
}
func start(ctrlChannel <-chan string, errorChannel chan<- error) {
close(errorChannel)
}