Chromium Code Reviews| Index: impl/cloud/context.go |
| diff --git a/impl/cloud/context.go b/impl/cloud/context.go |
| index f7525e439f0c62e9eefdab9155ecb83899863360..a4b19ea6990e1adbece421ee9dc7bafed5d184c6 100644 |
| --- a/impl/cloud/context.go |
| +++ b/impl/cloud/context.go |
| @@ -5,26 +5,69 @@ |
| package cloud |
| import ( |
| + "github.com/luci/gae/impl/dummy" |
| + ds "github.com/luci/gae/service/datastore" |
| + "github.com/luci/gae/service/mail" |
| + mc "github.com/luci/gae/service/memcache" |
| + "github.com/luci/gae/service/module" |
| + "github.com/luci/gae/service/taskqueue" |
| + "github.com/luci/gae/service/user" |
| + |
| "cloud.google.com/go/datastore" |
| + "github.com/bradfitz/gomemcache/memcache" |
| "golang.org/x/net/context" |
| ) |
| -// Use installs the cloud services implementation into the supplied Context. |
| -// |
| -// This includes: |
| -// - github.com/luci/gae/service/info |
| -// - github.com/luci/gae/service/datastore |
| +// Config is a full-stack cloud service configuration. A user can selectively |
| +// populate its fields, and services for the populated fields will be installed |
| +// in the Context and available. |
| // |
| -// This is built around the ability to use cloud datastore. |
| -func Use(c context.Context, client *datastore.Client) context.Context { |
| - return UseDS(useInfo(c), client) |
| +// Because the "impl/cloud" service collection is a composite set of cloud |
| +// services, the user can choose services based on their configuration. |
| +type Config struct { |
|
iannucci
2016/11/20 19:35:16
This feels kinda wrong; there probably should be a
dnj
2016/11/20 22:28:47
Yeah the mix-and-match world is definitely weird.
|
| + // DS is the cloud datastore client. If populated, the datastore service will |
| + // be installed. |
| + DS *datastore.Client |
| + |
| + // MC is the memcache service client. If populated, the memcache service will |
| + // be installed. |
| + MC *memcache.Client |
| } |
| -// UseDS installs the cloud datastore implementation into the supplied Context. |
| -func UseDS(c context.Context, client *datastore.Client) context.Context { |
| - cds := cloudDatastore{ |
| - client: client, |
| +// Use installs the Config into the supplied Context. Services will be installed |
| +// based on the fields that are populated in Config. |
| +// |
| +// Any services that are missing will have "impl/dummy" stubs installed. These |
| +// stubs will panic if called. |
| +func (cfg Config) Use(c context.Context) context.Context { |
| + // Dummy services that we don't support. |
| + c = mail.Set(c, dummy.Mail()) |
| + c = module.Set(c, dummy.Module()) |
| + c = taskqueue.SetRaw(c, dummy.TaskQueue()) |
| + c = user.Set(c, dummy.User()) |
| + |
| + c = useInfo(c) |
| + |
| + // datastore service |
| + if cfg.DS != nil { |
| + cds := cloudDatastore{ |
| + client: cfg.DS, |
| + } |
| + c = cds.use(c) |
| + } else { |
| + c = ds.SetRaw(c, dummy.Datastore()) |
| + } |
| + |
| + // memcache service |
| + if cfg.MC != nil { |
| + mc := memcacheClient{ |
| + client: cfg.MC, |
| + } |
| + c = mc.use(c) |
| + } else { |
| + c = mc.SetRaw(c, dummy.Memcache()) |
| } |
| - return cds.use(c) |
| + |
| + return c |
| } |