menu-voucherlist #101
43
internal/storage/db.go
Normal file
43
internal/storage/db.go
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
|
||||||
|
"git.defalsify.org/vise.git/db"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
DATATYPE_USERSUB = 64
|
||||||
|
)
|
||||||
|
|
||||||
|
type SubPrefixDb struct {
|
||||||
|
store db.Db
|
||||||
|
pfx []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
func NewSubPrefixDb(store db.Db, pfx []byte) *SubPrefixDb {
|
||||||
|
return &SubPrefixDb{
|
||||||
|
store: store,
|
||||||
|
pfx: pfx,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func(s *SubPrefixDb) toKey(k []byte) []byte {
|
||||||
|
return append(s.pfx, k...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func(s *SubPrefixDb) Get(ctx context.Context, key []byte) ([]byte, error) {
|
||||||
|
s.store.SetPrefix(DATATYPE_USERSUB)
|
||||||
|
key = s.toKey(key)
|
||||||
|
v, err := s.store.Get(ctx, key)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return v, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func(s *SubPrefixDb) Put(ctx context.Context, key []byte, val []byte) error {
|
||||||
|
s.store.SetPrefix(DATATYPE_USERSUB)
|
||||||
|
key = s.toKey(key)
|
||||||
|
return s.store.Put(ctx, key, val)
|
||||||
|
}
|
54
internal/storage/db_test.go
Normal file
54
internal/storage/db_test.go
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"context"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
memdb "git.defalsify.org/vise.git/db/mem"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestSubPrefix(t *testing.T) {
|
||||||
|
ctx := context.Background()
|
||||||
|
db := memdb.NewMemDb()
|
||||||
|
err := db.Connect(ctx, "")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
sdba := NewSubPrefixDb(db, []byte("tinkywinky"))
|
||||||
|
err = sdba.Put(ctx, []byte("foo"), []byte("dipsy"))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
r, err := sdba.Get(ctx, []byte("foo"))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if !bytes.Equal(r, []byte("dipsy")) {
|
||||||
|
t.Fatalf("expected 'dipsy', got %s", r)
|
||||||
|
}
|
||||||
|
|
||||||
|
sdbb := NewSubPrefixDb(db, []byte("lala"))
|
||||||
|
r, err = sdbb.Get(ctx, []byte("foo"))
|
||||||
|
if err == nil {
|
||||||
|
t.Fatal("expected not found")
|
||||||
|
}
|
||||||
|
|
||||||
|
err = sdbb.Put(ctx, []byte("foo"), []byte("pu"))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
r, err = sdbb.Get(ctx, []byte("foo"))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
if !bytes.Equal(r, []byte("pu")) {
|
||||||
|
t.Fatalf("expected 'pu', got %s", r)
|
||||||
|
}
|
||||||
|
|
||||||
|
r, err = sdba.Get(ctx, []byte("foo"))
|
||||||
|
if !bytes.Equal(r, []byte("dipsy")) {
|
||||||
|
t.Fatalf("expected 'dipsy', got %s", r)
|
||||||
|
}
|
||||||
|
}
|
@ -5,10 +5,6 @@ import (
|
|||||||
"git.defalsify.org/vise.git/persist"
|
"git.defalsify.org/vise.git/persist"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
DATATYPE_CUSTOM = 128
|
|
||||||
)
|
|
||||||
|
|
||||||
type Storage struct {
|
type Storage struct {
|
||||||
Persister *persist.Persister
|
Persister *persist.Persister
|
||||||
UserdataDb db.Db
|
UserdataDb db.Db
|
||||||
|
Loading…
Reference in New Issue
Block a user