| 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 // HEAVILY adapted from github.com/golang/appengine/datastore | 5 // HEAVILY adapted from github.com/golang/appengine/datastore |
| 6 | 6 |
| 7 package datastore | 7 package datastore |
| 8 | 8 |
| 9 import ( | 9 import ( |
| 10 "fmt" | 10 "fmt" |
| (...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 return fmt.Errorf("gae/helper: cannot set meta %q: unexported fi
eld", key) | 352 return fmt.Errorf("gae/helper: cannot set meta %q: unexported fi
eld", key) |
| 353 } | 353 } |
| 354 // setting a BoolField | 354 // setting a BoolField |
| 355 if b, ok := val.(bool); ok { | 355 if b, ok := val.(bool); ok { |
| 356 if b { | 356 if b { |
| 357 val = On | 357 val = On |
| 358 } else { | 358 } else { |
| 359 val = Off | 359 val = Off |
| 360 } | 360 } |
| 361 } | 361 } |
| 362 » p.o.Field(idx).Set(reflect.ValueOf(val)) | 362 » f := p.o.Field(idx) |
| 363 » if val == nil { |
| 364 » » f.Set(reflect.Zero(f.Type())) |
| 365 » } else { |
| 366 » » f.Set(reflect.ValueOf(val)) |
| 367 » } |
| 363 return nil | 368 return nil |
| 364 } | 369 } |
| 365 | 370 |
| 366 func (p *structPLS) Problem() error { return p.c.problem } | 371 func (p *structPLS) Problem() error { return p.c.problem } |
| 367 | 372 |
| 368 var ( | 373 var ( |
| 369 // The RWMutex is chosen intentionally, as the majority of access to the | 374 // The RWMutex is chosen intentionally, as the majority of access to the |
| 370 // structCodecs map will be in parallel and will be to read an existing
codec. | 375 // structCodecs map will be in parallel and will be to read an existing
codec. |
| 371 // There's no reason to serialize goroutines on every | 376 // There's no reason to serialize goroutines on every |
| 372 » // gae.datastore.{Get,Put}{,Multi} call. | 377 » // gae.Interface.{Get,Put}{,Multi} call. |
| 373 structCodecsMutex sync.RWMutex | 378 structCodecsMutex sync.RWMutex |
| 374 structCodecs = map[reflect.Type]*structCodec{} | 379 structCodecs = map[reflect.Type]*structCodec{} |
| 375 ) | 380 ) |
| 376 | 381 |
| 377 // validPropertyName returns whether name consists of one or more valid Go | 382 // validPropertyName returns whether name consists of one or more valid Go |
| 378 // identifiers joined by ".". | 383 // identifiers joined by ".". |
| 379 func validPropertyName(name string) bool { | 384 func validPropertyName(name string) bool { |
| 380 if name == "" { | 385 if name == "" { |
| 381 return false | 386 return false |
| 382 } | 387 } |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 556 if c.problem == errRecursiveStruct { | 561 if c.problem == errRecursiveStruct { |
| 557 c.problem = nil | 562 c.problem = nil |
| 558 } | 563 } |
| 559 return | 564 return |
| 560 } | 565 } |
| 561 | 566 |
| 562 func convertMeta(val string, t reflect.Type) (interface{}, error) { | 567 func convertMeta(val string, t reflect.Type) (interface{}, error) { |
| 563 switch t { | 568 switch t { |
| 564 case typeOfString: | 569 case typeOfString: |
| 565 return val, nil | 570 return val, nil |
| 571 case typeOfKey: |
| 572 if val != "" { |
| 573 return nil, fmt.Errorf("key field is not allowed to have
a default: %q", val) |
| 574 } |
| 575 return nil, nil |
| 566 case typeOfInt64: | 576 case typeOfInt64: |
| 567 if val == "" { | 577 if val == "" { |
| 568 return int64(0), nil | 578 return int64(0), nil |
| 569 } | 579 } |
| 570 return strconv.ParseInt(val, 10, 64) | 580 return strconv.ParseInt(val, 10, 64) |
| 571 case typeOfToggle: | 581 case typeOfToggle: |
| 572 switch val { | 582 switch val { |
| 573 case "on", "On", "true": | 583 case "on", "On", "true": |
| 574 return true, nil | 584 return true, nil |
| 575 case "off", "Off", "false": | 585 case "off", "Off", "false": |
| 576 return false, nil | 586 return false, nil |
| 577 } | 587 } |
| 578 return nil, fmt.Errorf("Toggle field has bad/missing default, go
t %q", val) | 588 return nil, fmt.Errorf("Toggle field has bad/missing default, go
t %q", val) |
| 579 } | 589 } |
| 580 return nil, fmt.Errorf("helper: meta field with bad type/value %s/%q", t
, val) | 590 return nil, fmt.Errorf("helper: meta field with bad type/value %s/%q", t
, val) |
| 581 } | 591 } |
| OLD | NEW |