package pflag
import (
"fmt"
"strconv"
"strings"
)
type int32SliceValue struct {
value *[]int32
changed bool
}
func newInt32SliceValue(val []int32 , p *[]int32 ) *int32SliceValue {
isv := new (int32SliceValue )
isv .value = p
*isv .value = val
return isv
}
func (s *int32SliceValue ) Set (val string ) error {
ss := strings .Split (val , "," )
out := make ([]int32 , len (ss ))
for i , d := range ss {
var err error
var temp64 int64
temp64 , err = strconv .ParseInt (d , 0 , 32 )
if err != nil {
return err
}
out [i ] = int32 (temp64 )
}
if !s .changed {
*s .value = out
} else {
*s .value = append (*s .value , out ...)
}
s .changed = true
return nil
}
func (s *int32SliceValue ) Type () string {
return "int32Slice"
}
func (s *int32SliceValue ) String () string {
out := make ([]string , len (*s .value ))
for i , d := range *s .value {
out [i ] = fmt .Sprintf ("%d" , d )
}
return "[" + strings .Join (out , "," ) + "]"
}
func (s *int32SliceValue ) fromString (val string ) (int32 , error ) {
t64 , err := strconv .ParseInt (val , 0 , 32 )
if err != nil {
return 0 , err
}
return int32 (t64 ), nil
}
func (s *int32SliceValue ) toString (val int32 ) string {
return fmt .Sprintf ("%d" , val )
}
func (s *int32SliceValue ) Append (val string ) error {
i , err := s .fromString (val )
if err != nil {
return err
}
*s .value = append (*s .value , i )
return nil
}
func (s *int32SliceValue ) Replace (val []string ) error {
out := make ([]int32 , len (val ))
for i , d := range val {
var err error
out [i ], err = s .fromString (d )
if err != nil {
return err
}
}
*s .value = out
return nil
}
func (s *int32SliceValue ) GetSlice () []string {
out := make ([]string , len (*s .value ))
for i , d := range *s .value {
out [i ] = s .toString (d )
}
return out
}
func int32SliceConv(val string ) (interface {}, error ) {
val = strings .Trim (val , "[]" )
if len (val ) == 0 {
return []int32 {}, nil
}
ss := strings .Split (val , "," )
out := make ([]int32 , len (ss ))
for i , d := range ss {
var err error
var temp64 int64
temp64 , err = strconv .ParseInt (d , 0 , 32 )
if err != nil {
return nil , err
}
out [i ] = int32 (temp64 )
}
return out , nil
}
func (f *FlagSet ) GetInt32Slice (name string ) ([]int32 , error ) {
val , err := f .getFlagType (name , "int32Slice" , int32SliceConv )
if err != nil {
return []int32 {}, err
}
return val .([]int32 ), nil
}
func (f *FlagSet ) Int32SliceVar (p *[]int32 , name string , value []int32 , usage string ) {
f .VarP (newInt32SliceValue (value , p ), name , "" , usage )
}
func (f *FlagSet ) Int32SliceVarP (p *[]int32 , name , shorthand string , value []int32 , usage string ) {
f .VarP (newInt32SliceValue (value , p ), name , shorthand , usage )
}
func Int32SliceVar (p *[]int32 , name string , value []int32 , usage string ) {
CommandLine .VarP (newInt32SliceValue (value , p ), name , "" , usage )
}
func Int32SliceVarP (p *[]int32 , name , shorthand string , value []int32 , usage string ) {
CommandLine .VarP (newInt32SliceValue (value , p ), name , shorthand , usage )
}
func (f *FlagSet ) Int32Slice (name string , value []int32 , usage string ) *[]int32 {
p := []int32 {}
f .Int32SliceVarP (&p , name , "" , value , usage )
return &p
}
func (f *FlagSet ) Int32SliceP (name , shorthand string , value []int32 , usage string ) *[]int32 {
p := []int32 {}
f .Int32SliceVarP (&p , name , shorthand , value , usage )
return &p
}
func Int32Slice (name string , value []int32 , usage string ) *[]int32 {
return CommandLine .Int32SliceP (name , "" , value , usage )
}
func Int32SliceP (name , shorthand string , value []int32 , usage string ) *[]int32 {
return CommandLine .Int32SliceP (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 .