Overhaul the argument parsing API
This commit is contained in:
parent
62d26082c9
commit
82f5c18129
9 changed files with 207 additions and 153 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue