summaryrefslogtreecommitdiff
path: root/vendor/git.iim.gay/grufwub/go-store/storage/storage.go
blob: 61f7221116dabebaa99960b4547df091971ebe05 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package storage

import (
	"io"
)

// StorageEntry defines a key in Storage
type StorageEntry interface {
	// Key returns the storage entry's key
	Key() string
}

// entry is the simplest possible StorageEntry
type entry string

func (e entry) Key() string {
	return string(e)
}

// Storage defines a means of storing and accessing key value pairs
type Storage interface {
	// Clean removes unused values and unclutters the storage (e.g. removing empty folders)
	Clean() error

	// ReadBytes returns the byte value for key in storage
	ReadBytes(key string) ([]byte, error)

	// ReadStream returns an io.ReadCloser for the value bytes at key in the storage
	ReadStream(key string) (io.ReadCloser, error)

	// WriteBytes writes the supplied value bytes at key in the storage
	WriteBytes(key string, value []byte) error

	// WriteStream writes the bytes from supplied reader at key in the storage
	WriteStream(key string, r io.Reader) error

	// Stat checks if the supplied key is in the storage
	Stat(key string) (bool, error)

	// Remove attempts to remove the supplied key-value pair from storage
	Remove(key string) error

	// WalkKeys walks the keys in the storage
	WalkKeys(opts *WalkKeysOptions) error
}

// WalkKeysOptions defines how to walk the keys in a storage implementation
type WalkKeysOptions struct {
	// WalkFn is the function to apply on each StorageEntry
	WalkFn func(StorageEntry)
}