| Index: service/datastore/multiarg.go
|
| diff --git a/service/datastore/multiarg.go b/service/datastore/multiarg.go
|
| index 494d3952c9f2ad4fc8b6eecc502053083ceeb3eb..ea7325ffcafd831cb6eb3721bf99f5f3bc37b78d 100644
|
| --- a/service/datastore/multiarg.go
|
| +++ b/service/datastore/multiarg.go
|
| @@ -21,26 +21,21 @@ type multiArgType struct {
|
| newElem func() reflect.Value
|
| }
|
|
|
| -func (mat *multiArgType) GetKeys(nk newKeyFunc, slice reflect.Value) ([]Key, error) {
|
| - ret := make([]Key, slice.Len())
|
| - lme := errors.LazyMultiError{Size: len(ret)}
|
| - for i := range ret {
|
| +func (mat *multiArgType) GetKeysPMs(nk newKeyFunc, slice reflect.Value) ([]Key, []PropertyMap, error) {
|
| + retKey := make([]Key, slice.Len())
|
| + retPM := make([]PropertyMap, slice.Len())
|
| + lme := errors.LazyMultiError{Size: len(retKey)}
|
| + for i := range retKey {
|
| key, err := mat.getKey(nk, slice.Index(i))
|
| - lme.Assign(i, err)
|
| - ret[i] = key
|
| - }
|
| - return ret, lme.Get()
|
| -}
|
| -
|
| -func (mat *multiArgType) GetPMs(slice reflect.Value) ([]PropertyMap, error) {
|
| - ret := make([]PropertyMap, slice.Len())
|
| - lme := errors.LazyMultiError{Size: len(ret)}
|
| - for i := range ret {
|
| - key, err := mat.getPM(slice.Index(i))
|
| - lme.Assign(i, err)
|
| - ret[i] = key
|
| + if !lme.Assign(i, err) {
|
| + retKey[i] = key
|
| + pm, err := mat.getPM(slice.Index(i))
|
| + if !lme.Assign(i, err) {
|
| + retPM[i] = pm
|
| + }
|
| + }
|
| }
|
| - return ret, lme.Get()
|
| + return retKey, retPM, lme.Get()
|
| }
|
|
|
| // parseMultiArg checks that v has type []S, []*S, []I, []P or []*P, for some
|
| @@ -234,22 +229,22 @@ func multiArgTypeInterface() multiArgType {
|
|
|
| func newKeyObjErr(nk newKeyFunc, src interface{}) (Key, error) {
|
| pls, name := mkPLSName(src)
|
| - if key := getMetaKey(pls, "key"); key != nil {
|
| + if key, _ := pls.GetMetaDefault("key", nil).(Key); key != nil {
|
| return key, nil
|
| }
|
|
|
| // get kind
|
| - kind := getMetaString(pls, "kind", name)
|
| + kind := pls.GetMetaDefault("kind", name).(string)
|
| if kind == "" {
|
| return nil, fmt.Errorf("unable to extract $kind from %v", src)
|
| }
|
|
|
| // get id - allow both to be default for default keys
|
| - sid := getMetaString(pls, "id", "")
|
| - iid := getMetaInt64(pls, "id", 0)
|
| + sid := pls.GetMetaDefault("id", "").(string)
|
| + iid := pls.GetMetaDefault("id", 0).(int64)
|
|
|
| // get parent
|
| - par := getMetaKey(pls, "parent")
|
| + par, _ := pls.GetMetaDefault("parent", nil).(Key)
|
|
|
| return nk(kind, sid, iid, par), nil
|
| }
|
| @@ -278,27 +273,3 @@ func mkPLSName(o interface{}) (PropertyLoadSaver, string) {
|
| name := pls.(*structPLS).o.Type().Name()
|
| return pls, name
|
| }
|
| -
|
| -func getMetaString(pls PropertyLoadSaver, key, dflt string) string {
|
| - mstr, err := pls.GetMeta(key)
|
| - ret, ok := mstr.(string)
|
| - if err != nil || !ok {
|
| - return dflt
|
| - }
|
| - return ret
|
| -}
|
| -
|
| -func getMetaInt64(pls PropertyLoadSaver, key string, dflt int64) int64 {
|
| - mint, err := pls.GetMeta(key)
|
| - ret, ok := mint.(int64)
|
| - if err != nil || !ok {
|
| - return dflt
|
| - }
|
| - return ret
|
| -}
|
| -
|
| -func getMetaKey(pls PropertyLoadSaver, key string) Key {
|
| - mkey, _ := pls.GetMeta(key)
|
| - ret, _ := mkey.(Key)
|
| - return ret
|
| -}
|
|
|