package pflag
import (
"fmt"
"net"
"strconv"
)
type ipMaskValue net .IPMask
func newIPMaskValue(val net .IPMask , p *net .IPMask ) *ipMaskValue {
*p = val
return (*ipMaskValue )(p )
}
func (i *ipMaskValue ) String () string { return net .IPMask (*i ).String () }
func (i *ipMaskValue ) Set (s string ) error {
ip := ParseIPv4Mask (s )
if ip == nil {
return fmt .Errorf ("failed to parse IP mask: %q" , s )
}
*i = ipMaskValue (ip )
return nil
}
func (i *ipMaskValue ) Type () string {
return "ipMask"
}
func ParseIPv4Mask (s string ) net .IPMask {
mask := net .ParseIP (s )
if mask == nil {
if len (s ) != 8 {
return nil
}
m := []int {}
for i := 0 ; i < 4 ; i ++ {
b := "0x" + s [2 *i :2 *i +2 ]
d , err := strconv .ParseInt (b , 0 , 0 )
if err != nil {
return nil
}
m = append (m , int (d ))
}
s := fmt .Sprintf ("%d.%d.%d.%d" , m [0 ], m [1 ], m [2 ], m [3 ])
mask = net .ParseIP (s )
if mask == nil {
return nil
}
}
return net .IPv4Mask (mask [12 ], mask [13 ], mask [14 ], mask [15 ])
}
func parseIPv4Mask(sval string ) (interface {}, error ) {
mask := ParseIPv4Mask (sval )
if mask == nil {
return nil , fmt .Errorf ("unable to parse %s as net.IPMask" , sval )
}
return mask , nil
}
func (f *FlagSet ) GetIPv4Mask (name string ) (net .IPMask , error ) {
val , err := f .getFlagType (name , "ipMask" , parseIPv4Mask )
if err != nil {
return nil , err
}
return val .(net .IPMask ), nil
}
func (f *FlagSet ) IPMaskVar (p *net .IPMask , name string , value net .IPMask , usage string ) {
f .VarP (newIPMaskValue (value , p ), name , "" , usage )
}
func (f *FlagSet ) IPMaskVarP (p *net .IPMask , name , shorthand string , value net .IPMask , usage string ) {
f .VarP (newIPMaskValue (value , p ), name , shorthand , usage )
}
func IPMaskVar (p *net .IPMask , name string , value net .IPMask , usage string ) {
CommandLine .VarP (newIPMaskValue (value , p ), name , "" , usage )
}
func IPMaskVarP (p *net .IPMask , name , shorthand string , value net .IPMask , usage string ) {
CommandLine .VarP (newIPMaskValue (value , p ), name , shorthand , usage )
}
func (f *FlagSet ) IPMask (name string , value net .IPMask , usage string ) *net .IPMask {
p := new (net .IPMask )
f .IPMaskVarP (p , name , "" , value , usage )
return p
}
func (f *FlagSet ) IPMaskP (name , shorthand string , value net .IPMask , usage string ) *net .IPMask {
p := new (net .IPMask )
f .IPMaskVarP (p , name , shorthand , value , usage )
return p
}
func IPMask (name string , value net .IPMask , usage string ) *net .IPMask {
return CommandLine .IPMaskP (name , "" , value , usage )
}
func IPMaskP (name , shorthand string , value net .IPMask , usage string ) *net .IPMask {
return CommandLine .IPMaskP (name , shorthand , value , usage )
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .