Advertisement
AlvinSeville7cf

Argument validation code peace

Sep 10th, 2021
2,410
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Awk 2.43 KB | None | 0 0
  1. # Checks whether argument conforms specified option specification.
  2. #
  3. # Arguments:
  4. # - args - array containing arguments (all indecies must be zero-based sequentially continue over entire array)
  5. # - i - index to start scanning arguments from (must point to item with option name before opening curly brace)
  6. # - possibleValue - possible argument value (argument value can be bundled with it in arg)
  7. # - outExists - array for marking option as defined
  8. # - outType - array with -t|--type values
  9. # - outAlias - array with -a|--alias values
  10. # - outIsAssignable - array with -ia|--is-assignable values
  11. # - outAllowBundle - array with -ab|--allow-bundle values
  12. # - outAssignmentChar - array with -ac|--assignment-char values
  13. function __checkArgumentConformsSpecification(args, i, possibleValue, outExists, outType, outAlias, outIsAssignable, outAllowBundle, outAssignmentChar) {
  14.   arg = args[i]
  15.  
  16.   optionExists = utils::false()
  17.   bundledAssignmentUsed = utils::false()
  18.  
  19.   if (arg in outExists)
  20.     optionExists = utils::true()
  21.  
  22.   for (option in outAlias) {
  23.     alias = outAlias[option]
  24.     split(alias, aliasList, ",")
  25.  
  26.     if (utils::containsValue(aliasList, arg)) {
  27.       optionExists = utils::true()
  28.       break
  29.     }
  30.   }
  31.  
  32.   if (utils::containsMatchingKey(outExists, "^" arg)) {
  33.     optionExists = utils::true()
  34.     bundledAssignmentUsed = utils::true()
  35.   }
  36.  
  37.   for (option in outAlias) {
  38.     alias = outAlias[option]
  39.     split(alias, aliasList, ",")
  40.  
  41.     if (utils::containsMatchingValue(aliasList, "^" arg)) {
  42.       optionExists = utils::true()
  43.       bundledAssignmentUsed = utils::true()
  44.       break
  45.     }
  46.   }
  47.  
  48.   if (!optionExists)
  49.     return errors::USER_UNKNOWN_OPTION_ERROR arg
  50.  
  51.   if (!outIsAssignable[arg] && bundledAssignmentUsed)
  52.     return errors::USER_BUNDLED_ASSIGNMENT_NOT_SUPPORTED_ERROR arg
  53.   if (!bundledAssignmentUsed && !possibleValue)
  54.     return errors::USER_NO_VALUE_PROVIDED_ERROR arg
  55.  
  56.   if (!bundledAssignmentUsed)
  57.     value = possibleValue
  58.   else {
  59.     if (outAssignmentChar[arg]) {
  60.       j = index(outAssignmentChar[arg], arg) + 1
  61.       value = substr(arg, j)
  62.       if (!value)
  63.         return utils::false()
  64.     }
  65.     sub("^" arg, "", value)
  66.   }
  67.  
  68.   switch (outType[arg]) {
  69.     case "integer":
  70.       return utils::isInteger(value)
  71.     case "float":
  72.       return utils::isFloat(value)
  73.     case "bool":
  74.       return utils::isBool(value)
  75.     case "string":
  76.       return utils::true()
  77.   }
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement