import 'package:libac_dart/argparse/Args.dart'; import 'package:libac_dart/argparse/types/Bool.dart'; import 'package:libac_dart/argparse/types/Integers.dart'; import 'package:libac_dart/argparse/types/String.dart'; class ArgumentParser { /// Parses a list of arguments. /// /// [args] The list of arguments to parse. /// Returns an Arguments object representing the input. static Arguments parse(List 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; } }