| 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 // This file contains types and values which are mirrors/duplicates of the | |
| 6 // upstream SDK errors. This exists so that users can depend solely on this | |
| 7 // wrapper library without also needing to import the SDK. | |
| 8 // | |
| 9 // Format of the errors is Err<sub>Name, where <sub> is one of the 2/3-letter | |
| 10 // All Caps subpackage codes (e.g. DS, TQ, MC, etc.). Name is the same as the | |
| 11 // original SDK error. | |
| 12 // | |
| 13 // Note that this only replicates the 'named' errors (which a user might compare | |
| 14 // for equality or observe by-type in their code like ErrDSNoSuchEntity). The | |
| 15 // underlying implementations can (and do) return many more sorts of non-named | |
| 16 // and custom errors. | |
| 17 | |
| 18 package gae | 5 package gae |
| 19 | 6 |
| 20 import ( | 7 import ( |
| 21 "fmt" | 8 "fmt" |
| 22 "reflect" | 9 "reflect" |
| 23 "sync" | 10 "sync" |
| 24 | |
| 25 "google.golang.org/appengine/datastore" | |
| 26 "google.golang.org/appengine/memcache" | |
| 27 "google.golang.org/appengine/taskqueue" | |
| 28 ) | 11 ) |
| 29 | 12 |
| 30 // These are pass-through versions from the managed-VM SDK. All implementations | |
| 31 // must return these (exact) errors (not just an error with the same text). | |
| 32 var ( | |
| 33 ErrDSInvalidEntityType = datastore.ErrInvalidEntityType | |
| 34 ErrDSInvalidKey = datastore.ErrInvalidKey | |
| 35 ErrDSNoSuchEntity = datastore.ErrNoSuchEntity | |
| 36 ErrDSConcurrentTransaction = datastore.ErrConcurrentTransaction | |
| 37 ErrDSQueryDone = datastore.Done | |
| 38 | |
| 39 ErrMCCacheMiss = memcache.ErrCacheMiss | |
| 40 ErrMCCASConflict = memcache.ErrCASConflict | |
| 41 ErrMCNoStats = memcache.ErrNoStats | |
| 42 ErrMCNotStored = memcache.ErrNotStored | |
| 43 ErrMCServerError = memcache.ErrServerError | |
| 44 | |
| 45 ErrTQTaskAlreadyAdded = taskqueue.ErrTaskAlreadyAdded | |
| 46 ) | |
| 47 | |
| 48 /////////////////////////////// Supporting code //////////////////////////////// | |
| 49 | |
| 50 // ErrDSFieldMismatch is returned when a field is to be loaded into a different | |
| 51 // type than the one it was stored from, or when a field is missing or | |
| 52 // unexported in the destination struct. | |
| 53 // StructType is the type of the struct pointed to by the destination argument | |
| 54 // passed to Get or to Iterator.Next. | |
| 55 type ErrDSFieldMismatch struct { | |
| 56 StructType reflect.Type | |
| 57 FieldName string | |
| 58 Reason string | |
| 59 } | |
| 60 | |
| 61 func (e *ErrDSFieldMismatch) Error() string { | |
| 62 return fmt.Sprintf("gae: cannot load field %q into a %q: %s", | |
| 63 e.FieldName, e.StructType, e.Reason) | |
| 64 } | |
| 65 | |
| 66 // MultiError is returned by batch operations when there are errors with | 13 // MultiError is returned by batch operations when there are errors with |
| 67 // particular elements. Errors will be in a one-to-one correspondence with | 14 // particular elements. Errors will be in a one-to-one correspondence with |
| 68 // the input elements; successful elements will have a nil entry. | 15 // the input elements; successful elements will have a nil entry. |
| 69 type MultiError []error | 16 type MultiError []error |
| 70 | 17 |
| 71 func (m MultiError) Error() string { | 18 func (m MultiError) Error() string { |
| 72 s, n := "", 0 | 19 s, n := "", 0 |
| 73 for _, e := range m { | 20 for _, e := range m { |
| 74 if e != nil { | 21 if e != nil { |
| 75 if n == 0 { | 22 if n == 0 { |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 154 | 101 |
| 155 // Get returns the MultiError, or nil, if no non-nil error was Assign'd. | 102 // Get returns the MultiError, or nil, if no non-nil error was Assign'd. |
| 156 func (e *LazyMultiError) Get() error { | 103 func (e *LazyMultiError) Get() error { |
| 157 e.Lock() | 104 e.Lock() |
| 158 defer e.Unlock() | 105 defer e.Unlock() |
| 159 if e.me == nil { | 106 if e.me == nil { |
| 160 return nil | 107 return nil |
| 161 } | 108 } |
| 162 return e.me | 109 return e.me |
| 163 } | 110 } |
| OLD | NEW |