database/filer.go

32 lines
1.5 KiB
Go

package database
// Filer is is a way to implement any generic key/value store.
// These functions should be plug and play with most of the popular key/value store golang libraries.
//
// NOTE: Many key/value golang libraries will already implement this interface already.
// This exists for more potential granular control in the case that they don't.
// Otherwise you'd have to build a wrapper around an existing key/value store to satisfy an overencompassing interface.
type Filer interface {
// NOTE: One can easily cast anything to a byte slice. (e.g: []byte("fuckholejones") )
// json.Marshal also returns a byte slice by default ;)
// Backend returns the underlying key/value store.
Backend() any
// Has should return true if the given key has an associated value.
Has(key []byte) bool
// Get should retrieve the byte slice corresponding to the given key, and any associated errors upon failure.
Get(key []byte) ([]byte, error)
// Put should insert the value data in a way that is associated and can be retrieved by the given key data.
Put(key []byte, value []byte) error
// Delete should delete the key and the value associated with the given key, and return an error upon failure.
Delete(key []byte) error
// Close should safely end any Filer operations of the given dataStore and close any relevant handlers.
Close() error
// Sync should take any volatile data and solidify it somehow if relevant. (ram to disk in most cases)
Sync() error
Keys() [][]byte
Len() int
}