func dsR2FProp(in datastore.Property) (ds.Property, error) { val := in.Value switch x := val.(type) { case datastore.ByteString: val = []byte(x) case *datastore.Key: val = dsR2F(x) case appengine.BlobKey: val = bs.Key(x) case appengine.GeoPoint: val = ds.GeoPoint(x) case time.Time: // "appengine" layer instantiates with Local timezone. if x.IsZero() { val = time.Time{} } else { val = x.UTC() } default: val = maybeIndexValue(val) } ret := ds.Property{} is := ds.ShouldIndex if in.NoIndex { is = ds.NoIndex } err := ret.SetValue(val, is) return ret, err }
// writePropertyImpl is an implementation of WriteProperty and // WriteIndexProperty. func writePropertyImpl(buf Buffer, context KeyContext, p *ds.Property, index bool) (err error) { defer recoverTo(&err) it, v := p.IndexTypeAndValue() if !index { it = p.Type() } typb := byte(it) if p.IndexSetting() != ds.NoIndex { typb |= 0x80 } panicIf(buf.WriteByte(typb)) err = writeIndexValue(buf, context, v) return }
func dsF2RProp(ctx context.Context, in ds.Property) (datastore.Property, error) { err := error(nil) ret := datastore.Property{ NoIndex: in.IndexSetting() == ds.NoIndex, } switch in.Type() { case ds.PTBytes: v := in.Value().([]byte) if in.IndexSetting() == ds.ShouldIndex { ret.Value = datastore.ByteString(v) } else { ret.Value = v } case ds.PTKey: ret.Value, err = dsF2R(ctx, in.Value().(*ds.Key)) case ds.PTBlobKey: ret.Value = appengine.BlobKey(in.Value().(bs.Key)) case ds.PTGeoPoint: ret.Value = appengine.GeoPoint(in.Value().(ds.GeoPoint)) default: ret.Value = in.Value() } return ret, err }