package main import ( "fmt" "os" "github.com/aykhans/dodo/pkg/config/parser" "github.com/aykhans/dodo/pkg/types" "github.com/aykhans/dodo/pkg/utils" "github.com/jedib0t/go-pretty/v6/text" "github.com/k0kubun/pp/v3" ) func main() { envParser := parser.NewConfigENVParser("DODO") envConfig, err := envParser.Parse() _ = utils.HandleErrorOrDie(err, utils.OnCustomError(func(err types.FieldParseErrors) error { printValidationErrors("ENV", err.Errors...) fmt.Println() os.Exit(1) return nil }), ) cliParser := parser.NewConfigCLIParser(os.Args) cliConf, err := cliParser.Parse() _ = utils.HandleErrorOrDie(err, utils.OnSentinelError(types.ErrCLINoArgs, func(err error) error { cliParser.PrintHelp() utils.PrintErrAndExit(text.FgRed, 1, "\nNo arguments provided.") return nil }), utils.OnCustomError(func(err types.CLIUnexpectedArgsError) error { cliParser.PrintHelp() utils.PrintErrAndExit(text.FgRed, 1, "\nUnexpected CLI arguments provided: %v", err.Args) return nil }), utils.OnCustomError(func(err types.FieldParseErrors) error { cliParser.PrintHelp() fmt.Println() printValidationErrors("CLI", err.Errors...) fmt.Println() os.Exit(1) return nil }), ) envConfig.Merge(cliConf) pp.Println(cliConf) //nolint pp.Println(envConfig) //nolint } func printValidationErrors(parserName string, errors ...types.FieldParseError) { for _, fieldErr := range errors { if fieldErr.Value == "" { utils.PrintErr(text.FgYellow, "[%s] Field '%s': %v", parserName, fieldErr.Field, fieldErr.Err) } utils.PrintErr(text.FgYellow, "[%s] Field '%s' (%s): %v", parserName, fieldErr.Field, fieldErr.Value, fieldErr.Err) } }