package bucket

import (
	"errors"
)

// FilterHandler where you receive key/val in your closure.
type FilterHandler func(key, val []byte) bool

// BucketItem used in filter.
type BucketItem struct {
	Key []byte
	Val []byte
}

// Bucket is sub-store interface.
type Bucket interface {
	Get(key []byte) ([]byte, error)
	Set(key, value []byte) error
	Del(key []byte) error
	Has(key []byte) bool
	Size() int64
	List() ([][]byte, error)
	Iterate(FilterHandler) error
	// Steam can be implemented by badger.Stream, but not for now
	// Stream(ctx context.Context, key []byte, cb func(io.ReadWriter) error) error
	Close() error
}

var (
	// ErrNilFilterHandler when FilterHandler is empty
	ErrNilFilterHandler = errors.New("handler can't be nil")

	// ErrNotFound is returned by key-value storage methods
	// that could not find element by key.
	ErrNotFound = errors.New("key not found")
)

// ErrIteratingAborted is returned by storage iterator
// after iteration has been interrupted.
var ErrIteratingAborted = errors.New("iteration aborted")