|
@@ -16,7 +16,6 @@ package types
|
|
|
|
|
|
|
|
import (
|
|
import (
|
|
|
"fmt"
|
|
"fmt"
|
|
|
- "net/url"
|
|
|
|
|
"sort"
|
|
"sort"
|
|
|
"strings"
|
|
"strings"
|
|
|
)
|
|
)
|
|
@@ -27,15 +26,10 @@ type URLsMap map[string]URLs
|
|
|
// which consists of discovery-formatted names-to-URLs, like:
|
|
// which consists of discovery-formatted names-to-URLs, like:
|
|
|
// mach0=http://1.1.1.1:2380,mach0=http://2.2.2.2::2380,mach1=http://3.3.3.3:2380,mach2=http://4.4.4.4:2380
|
|
// mach0=http://1.1.1.1:2380,mach0=http://2.2.2.2::2380,mach1=http://3.3.3.3:2380,mach2=http://4.4.4.4:2380
|
|
|
func NewURLsMap(s string) (URLsMap, error) {
|
|
func NewURLsMap(s string) (URLsMap, error) {
|
|
|
|
|
+ m := parse(s)
|
|
|
|
|
+
|
|
|
cl := URLsMap{}
|
|
cl := URLsMap{}
|
|
|
- v, err := url.ParseQuery(strings.Replace(s, ",", "&", -1))
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- return nil, err
|
|
|
|
|
- }
|
|
|
|
|
- for name, urls := range v {
|
|
|
|
|
- if len(urls) == 0 || urls[0] == "" {
|
|
|
|
|
- return nil, fmt.Errorf("empty URL given for %q", name)
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ for name, urls := range m {
|
|
|
us, err := NewURLs(urls)
|
|
us, err := NewURLs(urls)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
return nil, err
|
|
return nil, err
|
|
@@ -73,3 +67,25 @@ func (c URLsMap) URLs() []string {
|
|
|
func (c URLsMap) Len() int {
|
|
func (c URLsMap) Len() int {
|
|
|
return len(c)
|
|
return len(c)
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+// parse parses the given string and returns a map listing the values specified for each key.
|
|
|
|
|
+func parse(s string) map[string][]string {
|
|
|
|
|
+ m := make(map[string][]string)
|
|
|
|
|
+ for s != "" {
|
|
|
|
|
+ key := s
|
|
|
|
|
+ if i := strings.IndexAny(key, ","); i >= 0 {
|
|
|
|
|
+ key, s = key[:i], key[i+1:]
|
|
|
|
|
+ } else {
|
|
|
|
|
+ s = ""
|
|
|
|
|
+ }
|
|
|
|
|
+ if key == "" {
|
|
|
|
|
+ continue
|
|
|
|
|
+ }
|
|
|
|
|
+ value := ""
|
|
|
|
|
+ if i := strings.Index(key, "="); i >= 0 {
|
|
|
|
|
+ key, value = key[:i], key[i+1:]
|
|
|
|
|
+ }
|
|
|
|
|
+ m[key] = append(m[key], value)
|
|
|
|
|
+ }
|
|
|
|
|
+ return m
|
|
|
|
|
+}
|