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