Adds a CLI Argument parser
This commit is contained in:
parent
4ac95f605b
commit
7d045bd49f
8 changed files with 328 additions and 1 deletions
98
lib/argparse/Args.dart
Normal file
98
lib/argparse/Args.dart
Normal file
|
@ -0,0 +1,98 @@
|
|||
import 'package:libac_dart/argparse/types/Bool.dart';
|
||||
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;
|
||||
|
||||
Argument({required this.name, this.description = ""});
|
||||
|
||||
T getValue() {
|
||||
throw new UnimplementedError("This argument type has no value");
|
||||
}
|
||||
|
||||
Argument<T> clone() {
|
||||
Argument<T> arg;
|
||||
switch (getType()) {
|
||||
case ArgumentType.BOOL:
|
||||
{
|
||||
arg = new BoolArgument(name: name) as Argument<T>;
|
||||
break;
|
||||
}
|
||||
case ArgumentType.STRING:
|
||||
{
|
||||
arg = new StringArgument(name: name, value: getValue() as String)
|
||||
as Argument<T>;
|
||||
break;
|
||||
}
|
||||
case ArgumentType.INTEGER:
|
||||
{
|
||||
arg = new IntegerArgument(name: name, value: getValue() as int)
|
||||
as Argument<T>;
|
||||
break;
|
||||
}
|
||||
case ArgumentType.DOUBLE:
|
||||
{
|
||||
arg = new DoubleArgument(name: name, value: getValue() as double)
|
||||
as Argument<T>;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return arg;
|
||||
}
|
||||
|
||||
ArgumentType getType();
|
||||
}
|
||||
|
||||
enum ArgumentType { STRING, BOOL, INTEGER, DOUBLE }
|
||||
|
||||
class Arguments {
|
||||
Map<String, Argument> _args = {};
|
||||
|
||||
void setArg(Argument arg) {
|
||||
_args[arg.name] = arg;
|
||||
}
|
||||
|
||||
int get count => _args.length;
|
||||
|
||||
List<String> getArgNames() {
|
||||
List<String> args = [];
|
||||
for (MapEntry<String, Argument> entry in _args.entries) {
|
||||
args.add(entry.key);
|
||||
}
|
||||
|
||||
return args;
|
||||
}
|
||||
|
||||
Argument? getArg(String name) {
|
||||
if (hasArg(name))
|
||||
return _args[name];
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
bool hasArg(String name) {
|
||||
return _args.containsKey(name);
|
||||
}
|
||||
|
||||
bool argHasValue(String name) {
|
||||
if (hasArg(name)) {
|
||||
Argument arg = getArg(name)!;
|
||||
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());
|
||||
}
|
||||
|
||||
return args;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue