func (tf *typeFilter) Save() ([]datastore.Property, error) { props := []datastore.Property{} for name, propList := range tf.pm { if len(name) != 0 && name[0] == '$' { continue } multiple := len(propList) > 1 for _, prop := range propList { toAdd := datastore.Property{ Name: name, Multiple: multiple, NoIndex: prop.IndexSetting() == ds.NoIndex, } switch prop.Type() { case ds.PTBytes: v := prop.Value().([]byte) if prop.IndexSetting() == ds.ShouldIndex { toAdd.Value = datastore.ByteString(v) } else { toAdd.Value = v } case ds.PTKey: toAdd.Value = dsF2R(prop.Value().(ds.Key)) case ds.PTBlobKey: toAdd.Value = appengine.BlobKey(prop.Value().(bs.Key)) case ds.PTGeoPoint: toAdd.Value = appengine.GeoPoint(prop.Value().(ds.GeoPoint)) default: toAdd.Value = prop.Value() } props = append(props, toAdd) } } return props, nil }
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 }