diff --git a/db_test.go b/db_test.go index b86c3ed..3e3cb8d 100755 --- a/db_test.go +++ b/db_test.go @@ -58,6 +58,7 @@ func TestImplementations(t *testing.T) { cases := make([]DB, 0) cases = append(cases, &mock{m: make(map[string][]byte)}) cases = append(cases, NewMap()) + cases = append(cases, NewMapStream()) if cacheMem, err := NewCache(); err != nil { t.Errorf("cannot make cache/mem: %v", err) diff --git a/map_stream.go b/map_stream.go new file mode 100755 index 0000000..34ffad6 --- /dev/null +++ b/map_stream.go @@ -0,0 +1,28 @@ +package storage + +import ( + "bytes" + "io" + "io/ioutil" +) + +type MapStream struct { + *Map +} + +func NewMapStream() *MapStream { + return &MapStream{NewMap()} +} + +func (m *MapStream) GetStream(key string, ns ...string) (io.Reader, error) { + b, err := m.Get(key, ns...) + return bytes.NewReader(b), err +} + +func (m *MapStream) SetStream(key string, r io.Reader, ns ...string) error { + b, err := ioutil.ReadAll(r) + if err != nil { + return err + } + return m.Set(key, b, ns...) +}