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 }