func (o *Command) IntList(short string, long string, opts *Options) *[]int {
	result := make([]int, 0)
	a := &arg{
		result: &result,
		sname:  short,
		lname:  long,
		size:   2,
		opts:   opts,
		unique: false,
	}
	if err := o.addArg(a); err != nil {
		panic(fmt.Errorf("unable to add IntList: %s", err.Error()))
	}
	return &result
}
IntList creates new integer list argument. This is the argument that is allowed to be present multiple times on CLI.
All appearances of this argument on CLI will be collected into the list of integers. If no argument
provided, then the list is empty. Takes same parameters as Int
Returns a pointer the list of integers.
package argparse
import (
	"errors"
	"fmt"
	"os"
	"strings"
)
const DisableDescription = "DISABLEDDESCRIPTIONWILLNOTSHOWUP"
var disableHelp = false
type Command struct {
	name        string
	description string
	args        []*arg
	commands    []*Command
	parsed      bool
	happened    bool
	parent      *Command
	HelpFunc    func(c *Command, msg interface{}) string
	exitOnHelp  bool
}
func (o Command) GetName() string {
	return o.name
}
func (o Command) GetDescription() string {
	return o.description
}
func (o Command) GetArgs() (args []Arg) {
	for _, arg := range o.args {
		args = append(args, arg)
	}
	return
}
func (o Command) GetCommands() []*Command {
	return o.commands
}
func (o Command) GetParent() *Command {
	return o.parent
}
func (o *Command) Help(msg interface{}) string {
	tempC := o
	for tempC.HelpFunc == nil {
		if tempC.parent == nil {
			return ""
		}
		tempC = tempC.parent
	}
	return tempC.HelpFunc(o, msg)
}
type Parser struct {
	Command
}
type Options struct {
	Required bool
	Validate func(args []string) error
	Help     string
	Default  interface{}
}
func NewParser(name string, description string) *Parser {
	p := &Parser{}
	p.name = name
	p.description = description
	p.args = make([]*arg, 0)
	p.commands = make([]*Command, 0)
	p.help("h", "help")
	p.exitOnHelp = true
	p.HelpFunc = (*Command).Usage
	return p
}
func (o *Command) NewCommand(name string, description string) *Command {
	c := new(Command)
	c.name = name
	c.description = description
	c.parsed = false
	c.parent = o
	if !disableHelp {
		c.help("h", "help")
		c.exitOnHelp = true
		c.HelpFunc = (*Command).Usage
	}
	if o.commands == nil {
		o.commands = make([]*Command, 0)
	}
	o.commands = append(o.commands, c)
	return c
}
func (o *Parser) DisableHelp() {
	disableHelp = true
	for i, arg := range o.args {
		if _, ok := arg.result.(*help); ok {
			o.args = append(o.args[:i], o.args[i+1:]...)
		}
	}
	for _, com := range o.commands {
		for i, comArg := range com.args {
			if _, ok := comArg.result.(*help); ok {
				com.args = append(com.args[:i], com.args[i+1:]...)
			}
		}
	}
}
func (o *Command) ExitOnHelp(b bool) {
	o.exitOnHelp = b
	for _, c := range o.commands {
		c.ExitOnHelp(b)
	}
}
func (o *Parser) SetHelp(sname, lname string) {
	o.DisableHelp()
	o.help(sname, lname)
}
func (o *Command) Flag(short string, long string, opts *Options) *bool {
	var result bool
	a := &arg{
		result: &result,
		sname:  short,
		lname:  long,
		size:   1,
		opts:   opts,
		unique: true,
	}
	if err := o.addArg(a); err != nil {
		panic(fmt.Errorf("unable to add Flag: %s", err.Error()))
	}
	return &result
}
func (o *Command) FlagCounter(short string, long string, opts *Options) *int {
	var result int
	a := &arg{
		result: &result,
		sname:  short,
		lname:  long,
		size:   1,
		opts:   opts,
		unique: false,
	}
	if err := o.addArg(a); err != nil {
		panic(fmt.Errorf("unable to add FlagCounter: %s", err.Error()))
	}
	return &result
}
func (o *Command) String(short string, long string, opts *Options) *string {
	var result string
	a := &arg{
		result: &result,
		sname:  short,
		lname:  long,
		size:   2,
		opts:   opts,
		unique: true,
	}
	if err := o.addArg(a); err != nil {
		panic(fmt.Errorf("unable to add String: %s", err.Error()))
	}
	return &result
}
func (o *Command) Int(short string, long string, opts *Options) *int {
	var result int
	a := &arg{
		result: &result,
		sname:  short,
		lname:  long,
		size:   2,
		opts:   opts,
		unique: true,
	}
	if err := o.addArg(a); err != nil {
		panic(fmt.Errorf("unable to add Int: %s", err.Error()))
	}
	return &result
}
func (o *Command) Float(short string, long string, opts *Options) *float64 {
	var result float64
	a := &arg{
		result: &result,
		sname:  short,
		lname:  long,
		size:   2,
		opts:   opts,
		unique: true,
	}
	if err := o.addArg(a); err != nil {
		panic(fmt.Errorf("unable to add Float: %s", err.Error()))
	}
	return &result
}
func (o *Command) File(short string, long string, flag int, perm os.FileMode, opts *Options) *os.File {
	var result os.File
	a := &arg{
		result:   &result,
		sname:    short,
		lname:    long,
		size:     2,
		opts:     opts,
		unique:   true,
		fileFlag: flag,
		filePerm: perm,
	}
	if err := o.addArg(a); err != nil {
		panic(fmt.Errorf("unable to add File: %s", err.Error()))
	}
	return &result
}
func (o *Command) List(short string, long string, opts *Options) *[]string {
	return o.StringList(short, long, opts)
}
func (o *Command) StringList(short string, long string, opts *Options) *[]string {
	result := make([]string, 0)
	a := &arg{
		result: &result,
		sname:  short,
		lname:  long,
		size:   2,
		opts:   opts,
		unique: false,
	}
	if err := o.addArg(a); err != nil {
		panic(fmt.Errorf("unable to add StringList: %s", err.Error()))
	}
	return &result
}