mediocre-go-lib/mdb/mdatastore/datastore.go
2018-07-19 20:11:21 +00:00

44 lines
1.2 KiB
Go

// Package mdatastore implements connecting to Google's Datastore service and
// simplifying a number of interactions with it.
package mdatastore
import (
"context"
"cloud.google.com/go/datastore"
"github.com/mediocregopher/mediocre-go-lib/m"
"github.com/mediocregopher/mediocre-go-lib/mcfg"
"github.com/mediocregopher/mediocre-go-lib/mdb"
"github.com/mediocregopher/mediocre-go-lib/mlog"
)
// Datastore is a wrapper around a datastore client providing more
// functionality.
type Datastore struct {
*datastore.Client
gce *mdb.GCE
log *mlog.Logger
}
// Cfg configures and returns a Datastore instance which will be usable once
// StartRun is called on the passed in Cfg instance.
func Cfg(cfg *mcfg.Cfg) *Datastore {
cfg = cfg.Child("datastore")
var ds Datastore
ds.gce = mdb.CfgGCE(cfg)
ds.log = m.Log(cfg, &ds)
cfg.Start.Then(func(ctx context.Context) error {
ds.log.Info("connecting to datastore")
var err error
ds.Client, err = datastore.NewClient(ctx, ds.gce.Project, ds.gce.ClientOptions()...)
return mlog.ErrWithKV(err, &ds)
})
return &ds
}
// KV implements the mlog.KVer interface.
func (ds *Datastore) KV() mlog.KV {
return ds.gce.KV()
}