OLD | NEW |
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 |
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
251 return pls.Load(pm) | 251 return pls.Load(pm) |
252 }, | 252 }, |
253 setKey: func(slot reflect.Value, k *Key) { | 253 setKey: func(slot reflect.Value, k *Key) { |
254 setKey(slot.Elem().Interface(), k) | 254 setKey(slot.Elem().Interface(), k) |
255 }, | 255 }, |
256 } | 256 } |
257 } | 257 } |
258 | 258 |
259 func newKeyObjErr(aid, ns string, src interface{}) (*Key, error) { | 259 func newKeyObjErr(aid, ns string, src interface{}) (*Key, error) { |
260 pls := getMGS(src) | 260 pls := getMGS(src) |
261 » if key, _ := pls.GetMetaDefault("key", nil).(*Key); key != nil { | 261 » keyI, err := GetMetaDefault(pls, "key", nil) |
| 262 » if err != nil { |
| 263 » » return nil, err |
| 264 » } |
| 265 » if key, _ := keyI.(*Key); key != nil { |
262 return key, nil | 266 return key, nil |
263 } | 267 } |
264 | 268 |
265 // get kind | 269 // get kind |
266 » kind := pls.GetMetaDefault("kind", "").(string) | 270 » kindI, err := GetMetaDefault(pls, "kind", "") |
| 271 » if err != nil { |
| 272 » » return nil, err |
| 273 » } |
| 274 |
| 275 » kind, _ := kindI.(string) |
267 if kind == "" { | 276 if kind == "" { |
268 return nil, fmt.Errorf("unable to extract $kind from %T", src) | 277 return nil, fmt.Errorf("unable to extract $kind from %T", src) |
269 } | 278 } |
270 | 279 |
271 // get id - allow both to be default for default keys | 280 // get id - allow both to be default for default keys |
272 » sid := pls.GetMetaDefault("id", "").(string) | 281 » sidI, err := GetMetaDefault(pls, "id", "") |
273 » iid := pls.GetMetaDefault("id", 0).(int64) | 282 » if err != nil { |
| 283 » » return nil, err |
| 284 » } |
| 285 |
| 286 » iidI, err := GetMetaDefault(pls, "id", 0) |
| 287 » if err != nil { |
| 288 » » return nil, err |
| 289 » } |
274 | 290 |
275 // get parent | 291 // get parent |
276 » par, _ := pls.GetMetaDefault("parent", nil).(*Key) | 292 » parI, err := GetMetaDefault(pls, "parent", nil) |
| 293 » if err != nil { |
| 294 » » return nil, err |
| 295 » } |
277 | 296 |
| 297 iid, _ := iidI.(int64) |
| 298 sid, _ := sidI.(string) |
| 299 par, _ := parI.(*Key) |
278 return NewKey(aid, ns, kind, sid, iid, par), nil | 300 return NewKey(aid, ns, kind, sid, iid, par), nil |
279 } | 301 } |
280 | 302 |
281 func setKey(src interface{}, key *Key) { | 303 func setKey(src interface{}, key *Key) { |
282 pls := getMGS(src) | 304 pls := getMGS(src) |
283 if pls.SetMeta("key", key) == ErrMetaFieldUnset { | 305 if pls.SetMeta("key", key) == ErrMetaFieldUnset { |
284 lst := key.LastTok() | 306 lst := key.LastTok() |
285 if lst.StringID != "" { | 307 if lst.StringID != "" { |
286 _ = pls.SetMeta("id", lst.StringID) | 308 _ = pls.SetMeta("id", lst.StringID) |
287 } else { | 309 } else { |
288 _ = pls.SetMeta("id", lst.IntID) | 310 _ = pls.SetMeta("id", lst.IntID) |
289 } | 311 } |
290 _ = pls.SetMeta("kind", lst.Kind) | 312 _ = pls.SetMeta("kind", lst.Kind) |
291 _ = pls.SetMeta("parent", key.Parent()) | 313 _ = pls.SetMeta("parent", key.Parent()) |
292 } | 314 } |
293 } | 315 } |
294 | 316 |
295 func mkPLS(o interface{}) PropertyLoadSaver { | 317 func mkPLS(o interface{}) PropertyLoadSaver { |
296 if pls, ok := o.(PropertyLoadSaver); ok { | 318 if pls, ok := o.(PropertyLoadSaver); ok { |
297 return pls | 319 return pls |
298 } | 320 } |
299 return GetPLS(o) | 321 return GetPLS(o) |
300 } | 322 } |
OLD | NEW |