59 lines
1.1 KiB
Go
59 lines
1.1 KiB
Go
package universe_badger
|
|
|
|
import (
|
|
"github.com/dgraph-io/badger/v4"
|
|
"go.uber.org/fx"
|
|
"go.uber.org/zap"
|
|
um "universe.mrlokop.dev/core/modules"
|
|
kv "universe.mrlokop.dev/key_value"
|
|
)
|
|
|
|
type moduleConfig struct {
|
|
Path string
|
|
}
|
|
|
|
const (
|
|
kind = "universe:badger"
|
|
)
|
|
|
|
var (
|
|
Module = um.SimpleModule(kind, func(ctx um.ModuleFactoryContext) error {
|
|
cfg := &moduleConfig{}
|
|
err := ctx.ExtractConfig(cfg)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
ctx.Provide(fx.Annotate(func(
|
|
logger *zap.Logger,
|
|
) (*badger.DB, error) {
|
|
var (
|
|
ll = ctx.ConfigureLogger(logger)
|
|
opts = badger.DefaultOptions(cfg.Path)
|
|
)
|
|
|
|
if cfg.Path == "" {
|
|
opts.WithInMemory(true)
|
|
}
|
|
|
|
opts.WithLogger(&zapRedirectingLogger{target: ll})
|
|
|
|
db, err := badger.Open(opts)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return db, nil
|
|
}, fx.ResultTags(ctx.NameTag())))
|
|
|
|
ctx.Provide(fx.Annotate(func(
|
|
badger *badger.DB,
|
|
logger *zap.Logger,
|
|
) kv.KeyValueProvider {
|
|
return &keyValueProvider{}
|
|
}, fx.ParamTags(ctx.NameTag()), fx.ResultTags(ctx.NameTag())))
|
|
|
|
return nil
|
|
})
|
|
)
|