| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- // +build appengine
- package msgpack
- import (
- "reflect"
- ds "google.golang.org/appengine/datastore"
- )
- func init() {
- Register((*ds.Key)(nil), encodeDatastoreKeyValue, decodeDatastoreKeyValue)
- Register((*ds.Cursor)(nil), encodeDatastoreCursorValue, decodeDatastoreCursorValue)
- }
- func EncodeDatastoreKey(e *Encoder, key *ds.Key) error {
- if key == nil {
- return e.EncodeNil()
- }
- return e.EncodeString(key.Encode())
- }
- func encodeDatastoreKeyValue(e *Encoder, v reflect.Value) error {
- key := v.Interface().(*ds.Key)
- return EncodeDatastoreKey(e, key)
- }
- func DecodeDatastoreKey(d *Decoder) (*ds.Key, error) {
- v, err := d.DecodeString()
- if err != nil {
- return nil, err
- }
- if v == "" {
- return nil, nil
- }
- return ds.DecodeKey(v)
- }
- func decodeDatastoreKeyValue(d *Decoder, v reflect.Value) error {
- key, err := DecodeDatastoreKey(d)
- if err != nil {
- return err
- }
- v.Set(reflect.ValueOf(key))
- return nil
- }
- func encodeDatastoreCursorValue(e *Encoder, v reflect.Value) error {
- cursor := v.Interface().(ds.Cursor)
- return e.Encode(cursor.String())
- }
- func decodeDatastoreCursorValue(d *Decoder, v reflect.Value) error {
- s, err := d.DecodeString()
- if err != nil {
- return err
- }
- cursor, err := ds.DecodeCursor(s)
- if err != nil {
- return err
- }
- v.Set(reflect.ValueOf(cursor))
- return nil
- }
|