| package strslice // import "github.com/docker/docker/api/types/strslice" |
| |
| import "encoding/json" |
| |
| // StrSlice represents a string or an array of strings. |
| // We need to override the json decoder to accept both options. |
| type StrSlice []string |
| |
| // UnmarshalJSON decodes the byte slice whether it's a string or an array of |
| // strings. This method is needed to implement json.Unmarshaler. |
| func (e *StrSlice) UnmarshalJSON(b []byte) error { |
| if len(b) == 0 { |
| // With no input, we preserve the existing value by returning nil and |
| // leaving the target alone. This allows defining default values for |
| // the type. |
| return nil |
| } |
| |
| p := make([]string, 0, 1) |
| if err := json.Unmarshal(b, &p); err != nil { |
| var s string |
| if err := json.Unmarshal(b, &s); err != nil { |
| return err |
| } |
| p = append(p, s) |
| } |
| |
| *e = p |
| return nil |
| } |