parse.go 982 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package filters
  2. import (
  3. "errors"
  4. "strings"
  5. )
  6. /*
  7. Parse the argument to the filter flag. Like
  8. `docker ps -f 'created=today;image.name=ubuntu*'`
  9. Filters delimited by ';', and expected to be 'name=value'
  10. If prev map is provided, then it is appended to, and returned. By default a new
  11. map is created.
  12. */
  13. func ParseFlag(arg string, prev map[string]string) (map[string]string, error) {
  14. var filters map[string]string
  15. if prev != nil {
  16. filters = prev
  17. } else {
  18. filters = map[string]string{}
  19. }
  20. if len(arg) == 0 {
  21. return filters, nil
  22. }
  23. for _, chunk := range strings.Split(arg, ";") {
  24. if !strings.Contains(chunk, "=") {
  25. return filters, ErrorBadFormat
  26. }
  27. f := strings.SplitN(chunk, "=", 2)
  28. filters[f[0]] = f[1]
  29. }
  30. return filters, nil
  31. }
  32. var ErrorBadFormat = errors.New("bad format of filter (expected name=value)")
  33. func ToParam(f map[string]string) string {
  34. fs := []string{}
  35. for k, v := range f {
  36. fs = append(fs, k+"="+v)
  37. }
  38. return strings.Join(fs, ";")
  39. }