issues

Github, Jira, Gitlab issues from Plan 9's acme
Log | Files | Refs | README | LICENSE

search.go (913B)


      1 package main
      2 
      3 import (
      4 	"fmt"
      5 	"strings"
      6 )
      7 
      8 // parseSearch parses a search from a query string.
      9 // A query string has a form similar to a search query of the Github REST API;
     10 // it consists of keywords and qualifiers separated by whitespace.
     11 // A qualifier is a string of the form "param:value". A keyword is a plain string.
     12 // An example query: "database crash assignee:oliver"
     13 // Another: "state:closed panic fatal"
     14 func parseSearch(query string) (map[string]string, error) {
     15 	search := make(map[string]string)
     16 	for _, field := range strings.Fields(query) {
     17 		arg := strings.SplitN(field, ":", 2)
     18 		if len(arg) == 1 {
     19 			// concatenate keywords with spaces between each
     20 			search["search"] = search["search"] + " " + arg[0]
     21 			continue
     22 		}
     23 		switch arg[0] {
     24 		case "state", "assignee":
     25 			search[arg[0]] = arg[1]
     26 		default:
     27 			return nil, fmt.Errorf("unknown qualifier %s", arg[0])
     28 		}
     29 	}
     30 	return search, nil
     31 }