stub namespaces now that i realize file trees arent namespaces

master
bel 2021-08-05 21:51:50 -06:00
parent 9cda5ad071
commit f647664b54
6 changed files with 63 additions and 15 deletions

1
db.go
View File

@ -17,6 +17,7 @@ type DB interface {
Set(string, []byte, ...string) error
List([]string, ...string) ([]string, error)
Close() error
//Namespaces() ([][]string, error)
}
func New(key Type, params ...string) (db DB, err error) {

View File

@ -2,6 +2,7 @@ package storage
import (
"bytes"
"errors"
"io"
"io/ioutil"
"local/storage/resolve"
@ -34,6 +35,10 @@ func NewFiles(root string) (*Files, error) {
}, os.MkdirAll(root, os.ModePerm)
}
func (b *Files) Namespaces() ([][]string, error) {
return nil, errors.New("not impl")
}
func (b *Files) List(ns []string, limits ...string) ([]string, error) {
namespace := resolve.Namespace(ns)
limits = resolve.Limits(limits)

8
map.go
View File

@ -38,6 +38,14 @@ func (m *Map) Close() error {
return nil
}
func (m *Map) Namespaces() ([][]string, error) {
keys := [][]string{}
for key := range m.m {
keys = append(keys, resolve.UnNamespace(key))
}
return keys, nil
}
func (m *Map) List(ns []string, limits ...string) ([]string, error) {
m.lock.RLock()
defer m.lock.RUnlock()

View File

@ -2,6 +2,7 @@ package rclone
import (
"bytes"
"errors"
"io"
"io/ioutil"
"local/storage/resolve"
@ -110,6 +111,10 @@ func (rc *RClone) Close() error {
return nil
}
func (rc *RClone) Namespaces() ([][]string, error) {
return nil, errors.New("not impl")
}
func (rc *RClone) List(ns []string, limits ...string) ([]string, error) {
namespace := rc.ns
if len(ns) > 0 {

View File

@ -33,6 +33,31 @@ func (m *Redis) Close() error {
return m.client.Close()
}
func (m *Redis) Namespaces() ([][]string, error) {
resp, err := m.client.Do("KEYS", "*")
if err != nil {
return nil, err
}
keys := map[string][]string{}
results, ok := resp.([]interface{})
if !ok {
return nil, ErrNotFound
}
for _, key := range results {
pieces := resolve.UnNamespace(fmt.Sprintf("%s", key))
if len(pieces) < 2 {
continue
}
pieces = pieces[:len(pieces)-1]
keys[fmt.Sprint(pieces)] = pieces
}
result := make([][]string, 0, len(keys))
for _, v := range keys {
result = append(result, v)
}
return result, nil
}
func (m *Redis) List(ns []string, limits ...string) ([]string, error) {
limits = resolve.Limits(limits)
limits[0] = resolve.Namespace(append(ns, limits[0]))
@ -44,23 +69,23 @@ func (m *Redis) List(ns []string, limits ...string) ([]string, error) {
}
keys := []string{}
if results, ok := resp.([]interface{}); !ok {
results, ok := resp.([]interface{})
if !ok {
return nil, ErrNotFound
} else {
for i := range results {
_, ok := results[i].([]uint8)
if !ok {
return nil, errors.New("not a []byte key")
}
k := fmt.Sprintf("%s", results[i])
if k < limits[0] {
continue
}
if k > limits[1] {
break
}
keys = append(keys, k)
}
for i := range results {
_, ok := results[i].([]uint8)
if !ok {
return nil, errors.New("not a []byte key")
}
k := fmt.Sprintf("%s", results[i])
if k < limits[0] {
continue
}
if k > limits[1] {
break
}
keys = append(keys, k)
}
return keys, nil
}

View File

@ -7,6 +7,10 @@ import (
var DefaultNamespace = "namespace"
func UnNamespace(ns string) []string {
return strings.Split(ns, ".")
}
func Namespace(ns []string) string {
namespace := DefaultNamespace
if len(ns) > 0 {