mirror of
https://github.com/genuinetools/reg.git
synced 2024-08-21 22:30:22 -04:00
31 lines
772 B
Go
31 lines
772 B
Go
package 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
|
|
}
|