Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(896)

Side by Side Diff: service/datastore/multiarg.go

Issue 1270113002: Re-add metadata passthrough on Get operations (Closed) Base URL: https://github.com/luci/gae.git@fix_other_interfaces
Patch Set: add another test Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package datastore 5 package datastore
6 6
7 import ( 7 import (
8 "fmt" 8 "fmt"
9 "reflect" 9 "reflect"
10 10
11 "github.com/luci/luci-go/common/errors" 11 "github.com/luci/luci-go/common/errors"
12 ) 12 )
13 13
14 type multiArgType struct { 14 type multiArgType struct {
15 valid bool 15 valid bool
16 16
17 getKey func(nk newKeyFunc, slot reflect.Value) (Key, error) 17 getKey func(nk newKeyFunc, slot reflect.Value) (Key, error)
18 getPM func(slot reflect.Value) (PropertyMap, error) 18 getPM func(slot reflect.Value) (PropertyMap, error)
19 setPM func(slot reflect.Value, pm PropertyMap) error 19 setPM func(slot reflect.Value, pm PropertyMap) error
20 setKey func(slot reflect.Value, k Key) 20 setKey func(slot reflect.Value, k Key)
21 newElem func() reflect.Value 21 newElem func() reflect.Value
22 } 22 }
23 23
24 func (mat *multiArgType) GetKeys(nk newKeyFunc, slice reflect.Value) ([]Key, err or) { 24 func (mat *multiArgType) GetKeysPMs(nk newKeyFunc, slice reflect.Value) ([]Key, []PropertyMap, error) {
25 » ret := make([]Key, slice.Len()) 25 » retKey := make([]Key, slice.Len())
26 » lme := errors.LazyMultiError{Size: len(ret)} 26 » retPM := make([]PropertyMap, slice.Len())
27 » for i := range ret { 27 » lme := errors.LazyMultiError{Size: len(retKey)}
28 » for i := range retKey {
28 key, err := mat.getKey(nk, slice.Index(i)) 29 key, err := mat.getKey(nk, slice.Index(i))
29 » » lme.Assign(i, err) 30 » » if !lme.Assign(i, err) {
30 » » ret[i] = key 31 » » » retKey[i] = key
32 » » » pm, err := mat.getPM(slice.Index(i))
33 » » » if !lme.Assign(i, err) {
34 » » » » retPM[i] = pm
35 » » » }
36 » » }
31 } 37 }
32 » return ret, lme.Get() 38 » return retKey, retPM, lme.Get()
33 }
34
35 func (mat *multiArgType) GetPMs(slice reflect.Value) ([]PropertyMap, error) {
36 » ret := make([]PropertyMap, slice.Len())
37 » lme := errors.LazyMultiError{Size: len(ret)}
38 » for i := range ret {
39 » » key, err := mat.getPM(slice.Index(i))
40 » » lme.Assign(i, err)
41 » » ret[i] = key
42 » }
43 » return ret, lme.Get()
44 } 39 }
45 40
46 // parseMultiArg checks that v has type []S, []*S, []I, []P or []*P, for some 41 // parseMultiArg checks that v has type []S, []*S, []I, []P or []*P, for some
47 // struct type S, for some interface type I, or some non-interface non-pointer 42 // struct type S, for some interface type I, or some non-interface non-pointer
48 // type P such that P or *P implements PropertyLoadSaver. 43 // type P such that P or *P implements PropertyLoadSaver.
49 func parseMultiArg(e reflect.Type) multiArgType { 44 func parseMultiArg(e reflect.Type) multiArgType {
50 if e.Kind() != reflect.Slice { 45 if e.Kind() != reflect.Slice {
51 return multiArgTypeInvalid() 46 return multiArgTypeInvalid()
52 } 47 }
53 return parseArg(e.Elem()) 48 return parseArg(e.Elem())
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
295 return dflt 290 return dflt
296 } 291 }
297 return ret 292 return ret
298 } 293 }
299 294
300 func getMetaKey(pls PropertyLoadSaver, key string) Key { 295 func getMetaKey(pls PropertyLoadSaver, key string) Key {
301 mkey, _ := pls.GetMeta(key) 296 mkey, _ := pls.GetMeta(key)
302 ret, _ := mkey.(Key) 297 ret, _ := mkey.(Key)
303 return ret 298 return ret
304 } 299 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698