ducky/devices
2015-12-19
Parent:c24a6c5fcd8c
ducky/devices/context.go
Fix JSON pointers in errors when creating devices. Our JSON pointers used to point at the root of the document, but the properties were actually in objects in an array keyed off of "devices", so we had to update the field property of our errors to match. While we were in there, we fixed the "insufficient" error for a Device's name to be "missing" when the name is an empty string. So far, the only way for a Device's name for it to be insufficient is _for it to be the empty string_, but if in the future we raise the minimum length of the Device name, there will be a distinction and I'd like the code to recognise it.
| paddy@0 | 1 package devices |
| paddy@0 | 2 |
| paddy@0 | 3 import ( |
| paddy@0 | 4 "errors" |
| paddy@0 | 5 |
| paddy@0 | 6 "golang.org/x/net/context" |
| paddy@0 | 7 ) |
| paddy@0 | 8 |
| paddy@0 | 9 const ( |
| paddy@0 | 10 storerKey = "code.secondbit.org/ducky/devices.hg#Storer" |
| paddy@0 | 11 ) |
| paddy@0 | 12 |
| paddy@0 | 13 var ( |
| paddy@0 | 14 // ErrNoStorerSet is returned when the Context has no Storer set in it. |
| paddy@0 | 15 ErrNoStorerSet = errors.New("storerKey not set in Context") |
| paddy@0 | 16 // ErrStorerKeyNotStorer is returned when there's a value in the Context for storerKey, but it's not a Storer. |
| paddy@0 | 17 ErrStorerKeyNotStorer = errors.New("the value for storerKey does not fulfill the Storer interface") |
| paddy@0 | 18 ) |
| paddy@0 | 19 |
| paddy@15 | 20 // GetStorer returns the Storer associated with the passed Context. |
| paddy@15 | 21 // If no Storer is set, ErrNoStorerSet will be returned. |
| paddy@15 | 22 // If something that is not a Storer is set using the Storer's key, |
| paddy@15 | 23 // ErrStorerKeyNotStorer will be returned. |
| paddy@15 | 24 func GetStorer(c context.Context) (Storer, error) { |
| paddy@0 | 25 val := c.Value(storerKey) |
| paddy@0 | 26 if val == nil { |
| paddy@0 | 27 return nil, ErrNoStorerSet |
| paddy@0 | 28 } |
| paddy@0 | 29 storer, ok := val.(Storer) |
| paddy@0 | 30 if !ok { |
| paddy@0 | 31 return nil, ErrStorerKeyNotStorer |
| paddy@0 | 32 } |
| paddy@0 | 33 return storer, nil |
| paddy@0 | 34 } |
| paddy@15 | 35 |
| paddy@15 | 36 // WithStorer returns a Context that extends from the passed Context, |
| paddy@15 | 37 // but includes or overwrites the Storer key with the passed Storer. |
| paddy@15 | 38 func WithStorer(c context.Context, storer Storer) context.Context { |
| paddy@15 | 39 return context.WithValue(c, storerKey, storer) |
| paddy@15 | 40 } |