1package flags
2
3import (
4	"flag"
5	"fmt"
6	"strings"
7)
8
9// Ensure implements
10var _ flag.Value = (*FlagMapValue)(nil)
11
12// FlagMapValue is a flag implementation used to provide key=value semantics
13// multiple times.
14type FlagMapValue map[string]string
15
16func (h *FlagMapValue) String() string {
17	return fmt.Sprintf("%v", *h)
18}
19
20func (h *FlagMapValue) Set(value string) error {
21	idx := strings.Index(value, "=")
22	if idx == -1 {
23		return fmt.Errorf("Missing \"=\" value in argument: %s", value)
24	}
25
26	key, value := value[0:idx], value[idx+1:]
27
28	if *h == nil {
29		*h = make(map[string]string)
30	}
31
32	headers := *h
33	headers[key] = value
34	*h = headers
35
36	return nil
37}
38