74 lines
1.7 KiB
Go
74 lines
1.7 KiB
Go
package pogrebds
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"github.com/akrylysov/pogreb"
|
|
"github.com/ipfs/go-datastore"
|
|
"github.com/ipfs/go-datastore/query"
|
|
)
|
|
|
|
var _ datastore.Datastore = (*Datastore)(nil)
|
|
var _ datastore.PersistentDatastore = (*Datastore)(nil)
|
|
|
|
// NewDatastore creates a new pogreb datastore.
|
|
func NewDatastore(path string, options *pogreb.Options) (d *Datastore, err error) {
|
|
d = &Datastore{}
|
|
if d.db, err = pogreb.Open(path, options); err != nil {
|
|
return nil, err
|
|
}
|
|
return
|
|
}
|
|
|
|
type Datastore struct {
|
|
db *pogreb.DB
|
|
}
|
|
|
|
func (d *Datastore) Get(_ context.Context, key datastore.Key) (value []byte, err error) {
|
|
return d.db.Get(key.Bytes())
|
|
}
|
|
|
|
func (d *Datastore) Has(ctx context.Context, key datastore.Key) (exists bool, err error) {
|
|
return d.db.Has(key.Bytes())
|
|
}
|
|
|
|
func (d *Datastore) GetSize(ctx context.Context, key datastore.Key) (size int, err error) {
|
|
val, err := d.Get(ctx, key)
|
|
if err != nil {
|
|
return
|
|
}
|
|
return len(val), err
|
|
}
|
|
|
|
func (d *Datastore) Query(ctx context.Context, q query.Query) (query.Results, error) {
|
|
return nil, fmt.Errorf("pogrebds datastore doesn't support queries")
|
|
}
|
|
|
|
func (d *Datastore) Put(_ context.Context, key datastore.Key, value []byte) error {
|
|
return d.db.Put(key.Bytes(), value)
|
|
}
|
|
|
|
func (d *Datastore) Delete(_ context.Context, key datastore.Key) error {
|
|
return d.db.Delete(key.Bytes())
|
|
}
|
|
|
|
func (d *Datastore) Sync(ctx context.Context, prefix datastore.Key) error {
|
|
return d.db.Sync()
|
|
}
|
|
|
|
func (d *Datastore) DiskUsage(ctx context.Context) (uint64, error) {
|
|
size, err := d.db.FileSize()
|
|
if err != nil {
|
|
return 0, err
|
|
}
|
|
return uint64(size), nil
|
|
}
|
|
|
|
func (d *Datastore) Close() error {
|
|
return d.db.Close()
|
|
}
|
|
|
|
func (d *Datastore) Metrics() *pogreb.Metrics {
|
|
return d.db.Metrics()
|
|
}
|