func validateTool()

in tools/validate.go [29:95]


func validateTool() error {
	flag := flag.NewFlagSet("validate", flag.ContinueOnError)

	flag.Usage = printValidateHelp

	helpFlag := flag.Bool("h", false, "Print this help message.")
	envFlag := flag.Bool("e", false, "Retrieve value from the environment variable with the given name.")
	mailFlag := flag.Bool("m", false, "Check if the value is a valid email address.")
	numberFlag := flag.Bool("n", false, "Check if the value is a number.")
	regexFlag := flag.String("r", "", "Check if the value matches the given regular expression.")

	err := flag.Parse(os.Args[1:])
	if err != nil {
		return err
	}

	if *helpFlag {
		flag.Usage()
		return nil
	}

	if flag.NArg() != 1 && flag.NArg() != 2 {
		flag.Usage()
		return errors.New("invalid number of arguments")
	}

	arg := flag.Arg(0)
	customErr := flag.Arg(1)
	if customErr == "" {
		customErr = "validation failed"
	}
	value := arg

	if *envFlag {
		value = os.Getenv(arg)
		if value == "" {
			return fmt.Errorf("variable '%s' not set", arg)
		}
	}

	if *mailFlag {
		if !isValidEmail(value) {
			return fmt.Errorf(customErr)
		}
		return nil
	}

	if *numberFlag {
		if !isValidNumber(value) {
			return fmt.Errorf(customErr)
		}
		return nil
	}

	if *regexFlag != "" {
		valid, err := isValidByRegex(value, *regexFlag)
		if err != nil {
			return err
		}

		if !valid {
			return fmt.Errorf(customErr)
		}
	}

	return nil
}