github.com/taubyte/tau-cli@v0.1.13-0.20240326000942-487f0d57edfc/prompts/database/min_max.go (about)

     1  package databasePrompts
     2  
     3  import (
     4  	"fmt"
     5  	"strconv"
     6  
     7  	"github.com/pterm/pterm"
     8  	databaseFlags "github.com/taubyte/tau-cli/flags/database"
     9  	"github.com/taubyte/tau-cli/prompts"
    10  	"github.com/taubyte/tau-cli/validate"
    11  	"github.com/urfave/cli/v2"
    12  )
    13  
    14  func getOrRequireMin(c *cli.Context, prev ...string) string {
    15  	return prompts.GetOrRequireAString(c, databaseFlags.Min.Name, MinPrompt, validate.VariableMinValidator, prev...)
    16  }
    17  
    18  func getOrRequireMax(c *cli.Context, prev ...string) string {
    19  	return prompts.GetOrRequireAString(c, databaseFlags.Max.Name, MaxPrompt, validate.VariableMaxValidator, prev...)
    20  }
    21  
    22  func GetOrAskForMinMax(c *cli.Context, prevMin, prevMax int, new bool) (intMin int, intMax int, min string, max string) {
    23  	var err error
    24  	for {
    25  		if new {
    26  			min = getOrRequireMin(c)
    27  			max = getOrRequireMax(c)
    28  		} else {
    29  			min = getOrRequireMin(c, strconv.Itoa(prevMin))
    30  			max = getOrRequireMax(c, strconv.Itoa(prevMax))
    31  		}
    32  
    33  		intMin, intMax, err = convertAndValidateMinMax(min, max)
    34  		if err != nil {
    35  			pterm.Warning.Println(err.Error())
    36  			prompts.PanicIfPromptNotEnabled("min-max prompt")
    37  		} else {
    38  			break
    39  		}
    40  	}
    41  
    42  	return
    43  }
    44  
    45  func convertAndValidateMinMax(min string, max string) (_min int, _max int, err error) {
    46  	_min, err = strconv.Atoi(min)
    47  	if err != nil {
    48  		return 0, 0, fmt.Errorf(ParsingMinFailed, min, err)
    49  	}
    50  
    51  	_max, err = strconv.Atoi(max)
    52  	if err != nil {
    53  		return 0, 0, fmt.Errorf(ParsingMaxFailed, max, err)
    54  	}
    55  
    56  	if _min >= _max {
    57  		return 0, 0, fmt.Errorf(MinCannotBeGreaterThanMax, min, max)
    58  	}
    59  
    60  	return
    61  }