Overhaul the argument parsing API

This commit is contained in:
zontreck 2025-01-22 03:58:52 -07:00
parent 62d26082c9
commit 82f5c18129
9 changed files with 207 additions and 153 deletions

View file

@ -3,7 +3,6 @@ import 'package:libac_dart/argparse/types/Integers.dart';
import 'package:libac_dart/argparse/types/String.dart';
abstract class Argument<T> {
bool hasValue = false;
String name;
String description;
@ -46,53 +45,75 @@ abstract class Argument<T> {
}
ArgumentType getType();
bool hasValue();
}
enum ArgumentType { STRING, BOOL, INTEGER, DOUBLE }
class Arguments {
Map<String, Argument> _args = {};
Map<String, Argument> args = {};
void setArg(Argument arg) {
_args[arg.name] = arg;
args[arg.name] = arg;
}
int get count => _args.length;
int get count => args.length;
List<String> getArgNames() {
List<String> args = [];
for (MapEntry<String, Argument> entry in _args.entries) {
args.add(entry.key);
List<String> argsx = [];
for (MapEntry<String, Argument> entry in args.entries) {
argsx.add(entry.key);
}
return args;
return argsx;
}
/// Removes the argument if present. Otherwise does nothing.
///
/// Returns true if the argument was present and removed. False otherwise.
bool removeArg(String name) {
if (args.containsKey(name)) {
args.remove(name);
return true;
} else
return false;
}
Argument? getArg(String name) {
if (hasArg(name))
return _args[name];
return args[name];
else
return null;
}
bool hasArg(String name) {
return _args.containsKey(name);
return args.containsKey(name);
}
bool argHasValue(String name) {
if (hasArg(name)) {
Argument arg = getArg(name)!;
return arg.hasValue;
return arg.hasValue();
} else
throw new Exception("Warning: No such argument");
}
Arguments clone() {
Arguments args = Arguments();
for (MapEntry<String, Argument> entry in _args.entries) {
args.setArg(entry.value.clone());
Arguments argsx = Arguments();
for (MapEntry<String, Argument> entry in args.entries) {
argsx.setArg(entry.value.clone());
}
return args;
return argsx;
}
List<Argument> getArgumentsList() {
List<Argument> argsx = [];
for (var entry in args.entries) {
argsx.add(entry.value);
}
return argsx;
}
}