package pflag

import (
	
	
	
)

// -- net.IP value
type ipValue net.IP

func newIPValue( net.IP,  *net.IP) *ipValue {
	* = 
	return (*ipValue)()
}

func ( *ipValue) () string { return net.IP(*).String() }
func ( *ipValue) ( string) error {
	if  == "" {
		return nil
	}
	 := net.ParseIP(strings.TrimSpace())
	if  == nil {
		return fmt.Errorf("failed to parse IP: %q", )
	}
	* = ipValue()
	return nil
}

func ( *ipValue) () string {
	return "ip"
}

func ipConv( string) (interface{}, error) {
	 := net.ParseIP()
	if  != nil {
		return , nil
	}
	return nil, fmt.Errorf("invalid string being converted to IP address: %s", )
}

// GetIP return the net.IP value of a flag with the given name
func ( *FlagSet) ( string) (net.IP, error) {
	,  := .getFlagType(, "ip", ipConv)
	if  != nil {
		return nil, 
	}
	return .(net.IP), nil
}

// IPVar defines an net.IP flag with specified name, default value, and usage string.
// The argument p points to an net.IP variable in which to store the value of the flag.
func ( *FlagSet) ( *net.IP,  string,  net.IP,  string) {
	.VarP(newIPValue(, ), , "", )
}

// IPVarP is like IPVar, but accepts a shorthand letter that can be used after a single dash.
func ( *FlagSet) ( *net.IP, ,  string,  net.IP,  string) {
	.VarP(newIPValue(, ), , , )
}

// IPVar defines an net.IP flag with specified name, default value, and usage string.
// The argument p points to an net.IP variable in which to store the value of the flag.
func ( *net.IP,  string,  net.IP,  string) {
	CommandLine.VarP(newIPValue(, ), , "", )
}

// IPVarP is like IPVar, but accepts a shorthand letter that can be used after a single dash.
func ( *net.IP, ,  string,  net.IP,  string) {
	CommandLine.VarP(newIPValue(, ), , , )
}

// IP defines an net.IP flag with specified name, default value, and usage string.
// The return value is the address of an net.IP variable that stores the value of the flag.
func ( *FlagSet) ( string,  net.IP,  string) *net.IP {
	 := new(net.IP)
	.IPVarP(, , "", , )
	return 
}

// IPP is like IP, but accepts a shorthand letter that can be used after a single dash.
func ( *FlagSet) (,  string,  net.IP,  string) *net.IP {
	 := new(net.IP)
	.IPVarP(, , , , )
	return 
}

// IP defines an net.IP flag with specified name, default value, and usage string.
// The return value is the address of an net.IP variable that stores the value of the flag.
func ( string,  net.IP,  string) *net.IP {
	return CommandLine.IPP(, "", , )
}

// IPP is like IP, but accepts a shorthand letter that can be used after a single dash.
func (,  string,  net.IP,  string) *net.IP {
	return CommandLine.IPP(, , , )
}