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 rawdatastore | 5 package datastore |
6 | 6 |
7 import ( | 7 import ( |
8 "errors" | 8 "errors" |
9 "fmt" | 9 "fmt" |
10 "math" | 10 "math" |
11 "reflect" | 11 "reflect" |
12 "time" | 12 "time" |
13 | 13 |
14 "github.com/luci/gae/service/blobstore" | 14 "github.com/luci/gae/service/blobstore" |
15 ) | 15 ) |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
63 // handle the error normally, use SetValue(..., NoIndex) instead. | 63 // handle the error normally, use SetValue(..., NoIndex) instead. |
64 func MkPropertyNI(val interface{}) Property { | 64 func MkPropertyNI(val interface{}) Property { |
65 ret := Property{} | 65 ret := Property{} |
66 if err := ret.SetValue(val, NoIndex); err != nil { | 66 if err := ret.SetValue(val, NoIndex); err != nil { |
67 panic(err) | 67 panic(err) |
68 } | 68 } |
69 return ret | 69 return ret |
70 } | 70 } |
71 | 71 |
72 // PropertyConverter may be implemented by the pointer-to a struct field which | 72 // PropertyConverter may be implemented by the pointer-to a struct field which |
73 // is serialized by RawDatastore. Its ToProperty will be called on save, and | 73 // is serialized by datastore. Its ToProperty will be called on save, and |
74 // it's FromProperty will be called on load (from datastore). The method may | 74 // it's FromProperty will be called on load (from datastore). The method may |
75 // do arbitrary computation, and if it encounters an error, may return it. This | 75 // do arbitrary computation, and if it encounters an error, may return it. This |
76 // error will be a fatal error (as defined by PropertyLoadSaver) for the | 76 // error will be a fatal error (as defined by PropertyLoadSaver) for the |
77 // struct conversion. | 77 // struct conversion. |
78 // | 78 // |
79 // Example: | 79 // Example: |
80 // type Complex complex | 80 // type Complex complex |
81 // func (c *Complex) ToProperty() (ret Property, err error) { | 81 // func (c *Complex) ToProperty() (ret Property, err error) { |
82 // // something like: | 82 // // something like: |
83 // err = ret.SetValue(fmt.Sprint(*c), true) | 83 // err = ret.SetValue(fmt.Sprint(*c), true) |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
307 } | 307 } |
308 p.propType = pt | 308 p.propType = pt |
309 p.value = value | 309 p.value = value |
310 p.indexSetting = is | 310 p.indexSetting = is |
311 if t == typeOfByteSlice { | 311 if t == typeOfByteSlice { |
312 p.indexSetting = NoIndex | 312 p.indexSetting = NoIndex |
313 } | 313 } |
314 return | 314 return |
315 } | 315 } |
316 | 316 |
317 // PropertyLoadSaver may be implemented by a user type, and RawDatastore will | 317 // PropertyLoadSaver may be implemented by a user type, and datastore will |
318 // use this interface to serialize the type instead of trying to automatically | 318 // use this interface to serialize the type instead of trying to automatically |
319 // create a serialization codec for it with helper.GetPLS. | 319 // create a serialization codec for it with helper.GetPLS. |
320 type PropertyLoadSaver interface { | 320 type PropertyLoadSaver interface { |
321 // Load takes the values from the given map and attempts to save them in
to | 321 // Load takes the values from the given map and attempts to save them in
to |
322 // the underlying object (usually a struct or a PropertyMap). If a fatal | 322 // the underlying object (usually a struct or a PropertyMap). If a fatal |
323 // error occurs, it's returned via error. If non-fatal conversion errors | 323 // error occurs, it's returned via error. If non-fatal conversion errors |
324 // occur, error will be a MultiError containing one or more ErrFieldMism
atch | 324 // occur, error will be a MultiError containing one or more ErrFieldMism
atch |
325 // objects. | 325 // objects. |
326 Load(PropertyMap) error | 326 Load(PropertyMap) error |
327 | 327 |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
442 return err | 442 return err |
443 } | 443 } |
444 pm["$"+key] = []Property{prop} | 444 pm["$"+key] = []Property{prop} |
445 return nil | 445 return nil |
446 } | 446 } |
447 | 447 |
448 // Problem implements PropertyLoadSaver.Problem. It ALWAYS returns nil. | 448 // Problem implements PropertyLoadSaver.Problem. It ALWAYS returns nil. |
449 func (pm PropertyMap) Problem() error { | 449 func (pm PropertyMap) Problem() error { |
450 return nil | 450 return nil |
451 } | 451 } |
OLD | NEW |