]>
Commit | Line | Data |
---|---|---|
9b12e4fe JC |
1 | package opts |
2 | ||
3 | import ( | |
4 | "fmt" | |
5 | "net" | |
6 | ) | |
7 | ||
8 | // IPOpt holds an IP. It is used to store values from CLI flags. | |
9 | type IPOpt struct { | |
10 | *net.IP | |
11 | } | |
12 | ||
13 | // NewIPOpt creates a new IPOpt from a reference net.IP and a | |
14 | // string representation of an IP. If the string is not a valid | |
15 | // IP it will fallback to the specified reference. | |
16 | func NewIPOpt(ref *net.IP, defaultVal string) *IPOpt { | |
17 | o := &IPOpt{ | |
18 | IP: ref, | |
19 | } | |
20 | o.Set(defaultVal) | |
21 | return o | |
22 | } | |
23 | ||
24 | // Set sets an IPv4 or IPv6 address from a given string. If the given | |
25 | // string is not parseable as an IP address it returns an error. | |
26 | func (o *IPOpt) Set(val string) error { | |
27 | ip := net.ParseIP(val) | |
28 | if ip == nil { | |
29 | return fmt.Errorf("%s is not an ip address", val) | |
30 | } | |
31 | *o.IP = ip | |
32 | return nil | |
33 | } | |
34 | ||
35 | // String returns the IP address stored in the IPOpt. If stored IP is a | |
36 | // nil pointer, it returns an empty string. | |
37 | func (o *IPOpt) String() string { | |
38 | if *o.IP == nil { | |
39 | return "" | |
40 | } | |
41 | return o.IP.String() | |
42 | } |