| Index: impl/prod/raw_datastore_type_converter.go
|
| diff --git a/impl/prod/raw_datastore_type_converter.go b/impl/prod/raw_datastore_type_converter.go
|
| index 9799d577233b0c6f3ccc69498fd61ca41ad180f2..24bb6f4fa54deffa7336c37495785dd4947487ac 100644
|
| --- a/impl/prod/raw_datastore_type_converter.go
|
| +++ b/impl/prod/raw_datastore_type_converter.go
|
| @@ -162,19 +162,48 @@ func (tf *typeFilter) Load(props []datastore.Property) error {
|
| if err != nil {
|
| return err
|
| }
|
| - tf.pm[p.Name] = append(tf.pm[p.Name], prop)
|
| +
|
| + pdata := tf.pm[p.Name]
|
| + if p.Multiple {
|
| + var pslice ds.PropertySlice
|
| + if pdata != nil {
|
| + var ok bool
|
| + if pslice, ok = pdata.(ds.PropertySlice); !ok {
|
| + return fmt.Errorf("mixed Multiple/non-Multiple properties for %q", p.Name)
|
| + }
|
| + }
|
| + tf.pm[p.Name] = append(pslice, prop)
|
| + } else {
|
| + if pdata != nil {
|
| + return fmt.Errorf("multiple properties for non-Multiple %q", p.Name)
|
| + }
|
| + tf.pm[p.Name] = prop
|
| + }
|
| }
|
| return nil
|
| }
|
|
|
| func (tf *typeFilter) Save() ([]datastore.Property, error) {
|
| props := []datastore.Property{}
|
| - for name, propList := range tf.pm {
|
| + for name, pdata := range tf.pm {
|
| if len(name) != 0 && name[0] == '$' {
|
| continue
|
| }
|
| - multiple := len(propList) > 1
|
| - for _, prop := range propList {
|
| +
|
| + var (
|
| + pslice ds.PropertySlice
|
| + multiple bool
|
| + )
|
| + switch t := pdata.(type) {
|
| + case ds.Property:
|
| + pslice = ds.PropertySlice{t}
|
| + case ds.PropertySlice:
|
| + pslice, multiple = t, true
|
| + default:
|
| + return nil, fmt.Errorf("unknown PropertyData type %T", t)
|
| + }
|
| +
|
| + for _, prop := range pslice {
|
| toAdd, err := dsF2RProp(tf.ctx, prop)
|
| if err != nil {
|
| return nil, err
|
|
|