sqkv/options.go

86 lines
1.8 KiB
Go

package sqkv
import (
"fmt"
"strings"
)
// OpenMode for opening a DB
type OpenMode string
const (
OpenModeReadOnly OpenMode = "ro"
OpenModeReadWrite OpenMode = "rw"
OpenModeReadWriteCreate OpenMode = "rwc"
OpenModeMemory OpenMode = "memory"
)
// OpenCache for setting the cache mode
type OpenCache string
const (
OpenCacheShared OpenCache = "shared"
OpenCachePrivate OpenCache = "private"
)
// OpenJournalMode for setting the journal mode
type OpenJournalMode string
const (
OpenJournalModeDelete = "delete"
OpenJournalModeTruncate = "truncate"
OpenJournalModePersist = "persist"
OpenJournalModeMemory = "memory"
OpenJournalModeWAL = "wal"
OpenJournalModeOff = "off"
)
// OpenConfig is a configuration for opening a DB
type OpenConfig struct {
Mode OpenMode
Cache OpenCache
JournalMode OpenJournalMode
}
// String implements fmt.Stringer
func (oc OpenConfig) String() string {
var opts []string
if oc.Mode != "" {
opts = append(opts, "mode="+string(oc.Mode))
}
if oc.Cache != "" {
opts = append(opts, "cache="+string(oc.Cache))
}
if oc.JournalMode != "" {
opts = append(opts, fmt.Sprintf("_pragma=journal_mode(%s)", oc.JournalMode))
}
if len(opts) == 0 {
return ""
}
return "?" + strings.Join(opts, "&")
}
// OpenOption is a func for setting open config values
type OpenOption func(*OpenConfig)
// WithMode sets the mode for opening the DB
func WithMode(mode OpenMode) OpenOption {
return func(oc *OpenConfig) {
oc.Mode = mode
}
}
// WithCache sets the cache for opening the DB
func WithCache(cache OpenCache) OpenOption {
return func(oc *OpenConfig) {
oc.Cache = cache
}
}
// WithJournalMode sets the journal mode for the DB
func WithJournalMode(journalMode OpenJournalMode) OpenOption {
return func(oc *OpenConfig) {
oc.JournalMode = journalMode
}
}