parse static method

Arguments parse(
  1. List<String> args
)

Parses a list of arguments.

args The list of arguments to parse. Returns an Arguments object representing the input.

Implementation

static Arguments parse(List<String> args) {
  final ret = Arguments();
  for (var i = 0; i < args.length; i++) {
    final arg = args[i];
    if (arg.startsWith('--')) {
      var key = arg.substring(2); // Remove the '--' part of the argument
      dynamic value;

      // Check if the argument has a value attached (either --arg=value or --arg value)
      if (i + 1 < args.length && !args[i + 1].startsWith('--')) {
        value = args[i + 1]; // --arg value
        i++; // Skip the next argument as it is the value
      } else if (arg.contains('=')) {
        value = arg.substring(arg.indexOf('=') + 1); // --arg=value
        key = key.substring(0, key.indexOf('='));
      }

      // Determine the argument type and add it to the list
      if (int.tryParse(value?.toString() ?? '') != null) {
        ret.setArg(
            IntegerArgument(name: key, value: int.parse(value.toString())));
      } else if (value?.toString().toLowerCase() == 'true' ||
          value?.toString().toLowerCase() == 'false' ||
          value == null) {
        if (value != null)
          ret.setArg(BoolArgument(
              name: key, value: value.toString().toLowerCase() == 'true'));
        else
          ret.setArg(BoolArgument(name: key, value: true));
      } else if (double.tryParse(value?.toString() ?? '') != null) {
        ret.setArg(
            DoubleArgument(name: key, value: double.parse(value.toString())));
      } else {
        // Default to StringArgument if no matching type is found
        ret.setArg(StringArgument(name: key, value: value?.toString() ?? ''));
      }
    }
  }

  return ret;
}