-
Notifications
You must be signed in to change notification settings - Fork 3
/
options.go
84 lines (68 loc) · 1.52 KB
/
options.go
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package donutdb
import (
"errors"
"io"
"github.com/psanford/donutdb/sectorcache"
)
type Option interface {
setOption(*options) error
}
type options struct {
sectorSize int64
changeLogWriter io.Writer
defaultSchemaVersion int
sectorCache sectorcache.CacheV2
}
type sectorSizeOption struct {
sectorSize int64
}
func (o sectorSizeOption) setOption(opts *options) error {
opts.sectorSize = o.sectorSize
return nil
}
func WithSectorSize(s int64) Option {
return sectorSizeOption{
sectorSize: s,
}
}
type changeLogOption struct {
changeLogWriter io.Writer
}
func (o changeLogOption) setOption(opts *options) error {
opts.changeLogWriter = o.changeLogWriter
return nil
}
func WithChangeLogWriter(w io.Writer) Option {
return &changeLogOption{
changeLogWriter: w,
}
}
type defaultSchemaVersionOption struct {
version int
}
func (o defaultSchemaVersionOption) setOption(opts *options) error {
if o.version < 0 || o.version > 2 {
return errors.New("unknown schema version specified")
}
opts.defaultSchemaVersion = o.version
return nil
}
func WithDefaultSchemaVersion(v int) Option {
return &defaultSchemaVersionOption{
version: v,
}
}
type sectorCacheOption struct {
sectorCache sectorcache.CacheV2
}
func (o sectorCacheOption) setOption(opts *options) error {
opts.sectorCache = o.sectorCache
return nil
}
// WithSectorCacheV2 sets an optional cache strategy for
// schemav2 files.
func WithSectorCacheV2(c sectorcache.CacheV2) Option {
return §orCacheOption{
sectorCache: c,
}
}