package pflag

import (
	
	
	
)

// IPNet adapts net.IPNet for use as a flag.
type ipNetValue net.IPNet

func ( ipNetValue) () string {
	 := net.IPNet()
	return .String()
}

func ( *ipNetValue) ( string) error {
	, ,  := net.ParseCIDR(strings.TrimSpace())
	if  != nil {
		return 
	}
	* = ipNetValue(*)
	return nil
}

func (*ipNetValue) () string {
	return "ipNet"
}

func newIPNetValue( net.IPNet,  *net.IPNet) *ipNetValue {
	* = 
	return (*ipNetValue)()
}

func ipNetConv( string) (interface{}, error) {
	, ,  := net.ParseCIDR(strings.TrimSpace())
	if  == nil {
		return *, nil
	}
	return nil, fmt.Errorf("invalid string being converted to IPNet: %s", )
}

// GetIPNet return the net.IPNet value of a flag with the given name
func ( *FlagSet) ( string) (net.IPNet, error) {
	,  := .getFlagType(, "ipNet", ipNetConv)
	if  != nil {
		return net.IPNet{}, 
	}
	return .(net.IPNet), nil
}

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

// IPNetVarP is like IPNetVar, but accepts a shorthand letter that can be used after a single dash.
func ( *FlagSet) ( *net.IPNet, ,  string,  net.IPNet,  string) {
	.VarP(newIPNetValue(, ), , , )
}

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

// IPNetVarP is like IPNetVar, but accepts a shorthand letter that can be used after a single dash.
func ( *net.IPNet, ,  string,  net.IPNet,  string) {
	CommandLine.VarP(newIPNetValue(, ), , , )
}

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

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

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

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