parse.go 978 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package filters
  2. import (
  3. "errors"
  4. "github.com/dotcloud/docker/pkg/beam/data"
  5. "strings"
  6. )
  7. type Args map[string][]string
  8. /*
  9. Parse the argument to the filter flag. Like
  10. `docker ps -f 'created=today' -f 'image.name=ubuntu*'`
  11. If prev map is provided, then it is appended to, and returned. By default a new
  12. map is created.
  13. */
  14. func ParseFlag(arg string, prev Args) (Args, error) {
  15. var filters Args = prev
  16. if prev == nil {
  17. filters = Args{}
  18. }
  19. if len(arg) == 0 {
  20. return filters, nil
  21. }
  22. if !strings.Contains(arg, "=") {
  23. return filters, ErrorBadFormat
  24. }
  25. f := strings.SplitN(arg, "=", 2)
  26. filters[f[0]] = append(filters[f[0]], f[1])
  27. return filters, nil
  28. }
  29. var ErrorBadFormat = errors.New("bad format of filter (expected name=value)")
  30. /*
  31. packs the Args into an string for easy transport from client to server
  32. */
  33. func ToParam(a Args) string {
  34. return data.Encode(a)
  35. }
  36. /*
  37. unpacks the filter Args
  38. */
  39. func FromParam(p string) (Args, error) {
  40. return data.Decode(p)
  41. }