Files
badger/module.go
T
2025-04-25 12:53:12 +03:00

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
})
)