.
This commit is contained in:
parent
76f4ba2ec9
commit
ac804b6c5b
13 changed files with 140 additions and 95 deletions
|
|
@ -1,9 +1,8 @@
|
|||
plugins {
|
||||
id("java")
|
||||
id("maven-publish")
|
||||
id("de.kentoj.scrow.scrow-repository")
|
||||
id("de.kentoj.scrow.base-dependencies")
|
||||
id("de.kentoj.scrow.java-library")
|
||||
id("scrow.scrow-publish")
|
||||
id("scrow.base-dependencies")
|
||||
id("scrow.java-library")
|
||||
}
|
||||
|
||||
repositories {
|
||||
|
|
|
|||
|
|
@ -47,9 +47,9 @@ public class CommandHandler<T> {
|
|||
|
||||
String filter = null;
|
||||
if (parseResult instanceof ParseResult.UnknownLiteral<T>)
|
||||
filter = ((ParseResult.UnknownLiteral<T>) parseResult).getName();
|
||||
filter = ((ParseResult.UnknownLiteral<T>) parseResult).getInput();
|
||||
else if (parseResult instanceof ParseResult.NoPermission<T>)
|
||||
filter = ((ParseResult.NoPermission<T>) parseResult).getName();
|
||||
filter = ((ParseResult.NoPermission<T>) parseResult).getInput();
|
||||
return getSuggestions(sender, parseResult.getLiteral(), filter);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ public interface CommandArgument<T, V> {
|
|||
|
||||
ArgumentType<T, V> getType();
|
||||
|
||||
void setDefaultValueProvider(@Nullable Function<T, V> getDefaultValueProvider);
|
||||
void setDefaultValueProvider(@Nullable Function<T, V> defaultValueProvider);
|
||||
|
||||
@Nullable Function<T, V> getDefaultValueProvider();
|
||||
|
||||
|
|
|
|||
|
|
@ -4,9 +4,9 @@ import com.leakyabstractions.result.api.Result;
|
|||
import com.leakyabstractions.result.core.Results;
|
||||
import de.kentoj.kencommandapi.api.argument.CommandArgument;
|
||||
import de.kentoj.kencommandapi.api.invocation.ParsedArgument;
|
||||
import de.kentoj.kencommandapi.api.platform.HasPermissionMethod;
|
||||
import de.kentoj.kencommandapi.api.node.CommandNode;
|
||||
import de.kentoj.kencommandapi.api.node.RootCommandNode;
|
||||
import de.kentoj.kencommandapi.api.platform.HasPermissionMethod;
|
||||
import de.kentoj.kencommandapi.internal.ParsedArgumentImpl;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
|
|
@ -62,36 +62,41 @@ public class CommandParser<T> {
|
|||
T sender,
|
||||
boolean parseArgs
|
||||
) {
|
||||
Object value;
|
||||
|
||||
if (args.hasNext()) {
|
||||
var argStr = getRawArgument(args, nodeArg);
|
||||
if (!parseArgs) {
|
||||
value = null;
|
||||
} else {
|
||||
try {
|
||||
value = nodeArg.getType().parseInput(argStr);
|
||||
} catch (IllegalArgumentException ex) {
|
||||
return Results.failure(new ParseResult.IllegalArgument<>(node, nodeArg, ex.getMessage(), argStr));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (!args.hasNext()) {
|
||||
if (nodeArg.getDefaultValueProvider() == null)
|
||||
return Results.failure(new ParseResult.ArgumentExpected<>(node, nodeArg));
|
||||
value = nodeArg.getDefaultValueProvider().apply(sender);
|
||||
var value = nodeArg.getDefaultValueProvider().apply(sender);
|
||||
return Results.success(toParsed(value, nodeArg));
|
||||
}
|
||||
|
||||
Object value = null;
|
||||
var argStr = getRawArgument(args, nodeArg);
|
||||
if (parseArgs) {
|
||||
try {
|
||||
value = nodeArg.getType().parseInput(argStr);
|
||||
} catch (IllegalArgumentException ex) {
|
||||
return Results.failure(new ParseResult.IllegalArgument<>(node, nodeArg, ex.getMessage(), argStr));
|
||||
}
|
||||
}
|
||||
|
||||
var parsedArg = new ParsedArgumentImpl<>(value, (CommandArgument<T, Object>) nodeArg);
|
||||
return Results.success(parsedArg);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private ParsedArgument<T, Object> toParsed(Object value, CommandArgument<T, ?> arg) {
|
||||
return new ParsedArgumentImpl<>(value, (CommandArgument<T, Object>) arg);
|
||||
}
|
||||
|
||||
private String getRawArgument(Iterator<String> args, CommandArgument<T, ?> arg) {
|
||||
StringBuilder rawArgument = new StringBuilder();
|
||||
|
||||
if (arg.getType().isGreedy()) {
|
||||
while (args.hasNext()) {
|
||||
rawArgument.append(" ");
|
||||
rawArgument.append(args.next());
|
||||
}
|
||||
rawArgument.deleteCharAt(0);
|
||||
} else {
|
||||
rawArgument = new StringBuilder(args.next());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,11 +35,11 @@ public abstract sealed class ParseResult<T> permits ParseResult.IllegalArgument,
|
|||
public static final class UnknownLiteral<T> extends ParseResult<T> {
|
||||
private final CommandNode<T> previousLiteral;
|
||||
@Getter
|
||||
private final String name;
|
||||
private final String input;
|
||||
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return "Unknown subcommand: " + name;
|
||||
return "Unknown subcommand: " + input;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -77,11 +77,11 @@ public abstract sealed class ParseResult<T> permits ParseResult.IllegalArgument,
|
|||
@Getter
|
||||
private final CommandNode<T> literal;
|
||||
@Getter
|
||||
private final String name;
|
||||
private final String input;
|
||||
|
||||
@Override
|
||||
public String getMessage() {
|
||||
return "Unknown subcommand: " + name;
|
||||
return "Unknown subcommand: " + input;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import java.util.concurrent.CompletableFuture;
|
|||
public interface SuggestionProvider<T> {
|
||||
|
||||
/**
|
||||
* @return an unfiltered(no permission checks or filtering by input) list of strings that may be used for the argument
|
||||
* @return an unfiltered(no permission checks or filtering by input) list of strings that may be used for the argument/literal
|
||||
*/
|
||||
List<String> suggest(T sender);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,8 +21,7 @@ public class CommandArgumentImpl<T, V> implements CommandArgument<T, V> {
|
|||
|
||||
@Getter
|
||||
@Setter
|
||||
private @Nullable Function<T, V> defaultValueProvider;
|
||||
|
||||
private @Nullable Function<T, V> defaultValueProvider = null;
|
||||
@Setter
|
||||
private @Nullable SuggestionProvider<T> suggestionProvider;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue