Index: go/src/infra/gae/libs/context/context.go |
diff --git a/go/src/infra/gae/libs/context/context.go b/go/src/infra/gae/libs/context/context.go |
new file mode 100644 |
index 0000000000000000000000000000000000000000..db901a8669b4e68e1e31a91bbdae0cca41ac068b |
--- /dev/null |
+++ b/go/src/infra/gae/libs/context/context.go |
@@ -0,0 +1,109 @@ |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
Vadim Sh.
2015/03/06 02:54:27
I assume all the permutations are actually used do
|
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+// +build appengine |
+ |
+package context |
+ |
+import ( |
+ "appengine" |
+ "appengine/datastore" |
+ |
+ "github.com/mjibson/goon" |
+ |
+ "infra/libs/logging" |
+) |
+ |
+/// Kinds + Keys |
+ |
+type Kinder interface { |
+ Kind(src interface{}) string |
+} |
+ |
+type KindSetter interface { |
+ KindNameResolver() goon.KindNameResolver |
+ SetKindNameResolver(goon.KindNameResolver) |
+} |
+ |
+type NewKeyer interface { |
+ NewKey(kind, stringID string, intID int64, parent *datastore.Key) *datastore.Key |
+ NewKeyObj(src interface{}) *datastore.Key |
+ NewKeyObjError(src interface{}) (*datastore.Key, error) |
+} |
+ |
+type KindKeyer interface { |
+ Kinder |
+ NewKeyer |
+} |
+ |
+/// Read + Write |
+ |
+type SingleReadWriter interface { |
+ Put(src interface{}) (*datastore.Key, error) |
+ Get(dst interface{}) error |
+ Delete(key *datastore.Key) error |
+} |
+ |
+type MultiReadWriter interface { |
+ SingleReadWriter |
+ DeleteMulti(keys []*datastore.Key) error |
+ GetMulti(dst interface{}) error |
+ PutMulti(src interface{}) ([]*datastore.Key, error) |
+} |
+ |
+/// Queries |
+ |
+type Queryer interface { |
+ Run(q *datastore.Query) Iterator |
+ GetAll(q *datastore.Query, dst interface{}) ([]*datastore.Key, error) |
+ Count(q *datastore.Query) (int, error) |
+} |
+ |
+type Iterator interface { |
+ Cursor() (datastore.Cursor, error) |
+ Next(dst interface{}) (*datastore.Key, error) |
+} |
+ |
+/// Transactions |
+ |
+type Transactioner interface { |
+ RunInTransaction(f func(c Context) error, opts *datastore.TransactionOptions) error |
+} |
+ |
+/// Abstraction breaking! |
+ |
+type DangerousContexter interface { |
+ Context() appengine.Context |
+} |
+ |
+type SingleContext interface { |
+ logging.Logger |
+ Kinder |
+ NewKeyer |
+ SingleReadWriter |
+} |
+ |
+type Context interface { |
+ logging.Logger |
+ Kinder |
+ NewKeyer |
+ MultiReadWriter |
+ Queryer |
+ KindSetter |
+} |
+ |
+type TransactionerContext interface { |
+ Context |
+ Transactioner |
+} |
+ |
+type DangerousContext interface { |
+ DangerousContexter |
+ Context |
+} |
+ |
+type DangerousTransactionerContext interface { |
Vadim Sh.
2015/03/06 02:54:27
nit: maybe "FullContext" or "CompleteContext" or "
|
+ DangerousContexter |
+ TransactionerContext |
+} |