92 lines
1.5 KiB
Go
92 lines
1.5 KiB
Go
package journal
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
type Journal interface {
|
|
Write([]byte, []byte) (int, error)
|
|
Read([]byte, []byte) (int, error)
|
|
Configure(interface{}) error
|
|
}
|
|
|
|
var journalTypes map[string]Journal
|
|
|
|
func init() {
|
|
journalTypes = make(map[string]Journal)
|
|
}
|
|
|
|
func RegisterJournal(engine string, journal Journal) {
|
|
journalTypes[engine] = journal
|
|
}
|
|
|
|
func New(ctype string, cfg interface{}) (Journal, error) {
|
|
var err error
|
|
|
|
journal, ok := journalTypes[ctype]
|
|
if !ok {
|
|
return nil, fmt.Errorf("unknown cluster type %s. only %s supported", ctype, strings.Join(JournalTypes(), ","))
|
|
}
|
|
|
|
if cfg == nil {
|
|
return journal, nil
|
|
}
|
|
|
|
err = journal.Configure(cfg)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return journal, nil
|
|
}
|
|
|
|
func JournalTypes() []string {
|
|
var ctypes []string
|
|
for ctype, _ := range journalTypes {
|
|
ctypes = append(ctypes, ctype)
|
|
}
|
|
return ctypes
|
|
}
|
|
|
|
type Dummy struct{}
|
|
|
|
func (*Dummy) Configure(interface{}) error {
|
|
return nil
|
|
}
|
|
|
|
func (*Dummy) Del(interface{}) error {
|
|
return nil
|
|
}
|
|
|
|
func (*Dummy) Set(interface{}, interface{}) error {
|
|
return nil
|
|
}
|
|
func (*Dummy) Get(interface{}) (interface{}, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
func (*Dummy) Exists(interface{}) (bool, error) {
|
|
return false, nil
|
|
}
|
|
|
|
func (*Dummy) Keys() ([]interface{}, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
func (*Dummy) OnEvict(func(interface{}, interface{})) error {
|
|
return nil
|
|
}
|
|
|
|
func (*Dummy) Peek(interface{}) (interface{}, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
func (*Dummy) Purge() error {
|
|
return nil
|
|
}
|
|
|
|
func (*Dummy) Size() int {
|
|
return 0
|
|
}
|