Add sender to compound argument mappers
This commit is contained in:
parent
aaa6386ca3
commit
caf1cc5b39
5 changed files with 23 additions and 19 deletions
|
|
@ -48,8 +48,8 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.function.BiFunction;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
* A command consists out of a chain of {@link CommandArgument command arguments}.
|
||||
|
|
@ -495,7 +495,7 @@ public class Command<C> {
|
|||
final @NonNull TypeToken<O> outputType,
|
||||
final @NonNull Pair<String, String> names,
|
||||
final @NonNull Pair<Class<U>, Class<V>> parserPair,
|
||||
final @NonNull Function<Pair<U, V>, O> mapper,
|
||||
final @NonNull BiFunction<C, Pair<U, V>, O> mapper,
|
||||
final @NonNull Description description) {
|
||||
if (this.commandManager == null) {
|
||||
throw new IllegalStateException("This cannot be called from a command that has no command manager attached");
|
||||
|
|
@ -559,7 +559,7 @@ public class Command<C> {
|
|||
final @NonNull Triplet<String, String, String> names,
|
||||
final @NonNull Triplet<Class<U>, Class<V>,
|
||||
Class<W>> parserTriplet,
|
||||
final @NonNull Function<Triplet<U, V, W>, O> mapper,
|
||||
final @NonNull BiFunction<C, Triplet<U, V, W>, O> mapper,
|
||||
final @NonNull Description description) {
|
||||
if (this.commandManager == null) {
|
||||
throw new IllegalStateException("This cannot be called from a command that has no command manager attached");
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ import cloud.commandframework.types.tuples.Pair;
|
|||
import io.leangen.geantyref.TypeToken;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import java.util.function.Function;
|
||||
import java.util.function.BiFunction;
|
||||
|
||||
/**
|
||||
* A compound argument consisting of two inner arguments
|
||||
|
|
@ -59,7 +59,7 @@ public class ArgumentPair<C, U, V, O> extends CompoundArgument<Pair<U, V>, C, O>
|
|||
final @NonNull Pair<@NonNull String, @NonNull String> names,
|
||||
final @NonNull Pair<@NonNull Class<U>, @NonNull Class<V>> types,
|
||||
final @NonNull Pair<@NonNull ArgumentParser<C, U>, @NonNull ArgumentParser<C, V>> parserPair,
|
||||
final @NonNull Function<@NonNull Pair<@NonNull U, @NonNull V>, @NonNull O> mapper,
|
||||
final @NonNull BiFunction<@NonNull C, @NonNull Pair<@NonNull U, @NonNull V>, @NonNull O> mapper,
|
||||
final @NonNull TypeToken<O> valueType) {
|
||||
super(required, name, names, parserPair, types, mapper, o -> Pair.of((U) o[0], (V) o[1]), valueType);
|
||||
}
|
||||
|
|
@ -129,7 +129,7 @@ public class ArgumentPair<C, U, V, O> extends CompoundArgument<Pair<U, V>, C, O>
|
|||
this.names,
|
||||
this.types,
|
||||
this.parserPair,
|
||||
Function.identity(),
|
||||
(sender, pair) -> pair,
|
||||
new TypeToken<Pair<U, V>>() {
|
||||
});
|
||||
}
|
||||
|
|
@ -143,7 +143,7 @@ public class ArgumentPair<C, U, V, O> extends CompoundArgument<Pair<U, V>, C, O>
|
|||
* @return Created pair
|
||||
*/
|
||||
public <O> @NonNull ArgumentPair<C, U, V, O> withMapper(final @NonNull TypeToken<O> clazz,
|
||||
final @NonNull Function<@NonNull Pair<@NonNull U,
|
||||
final @NonNull BiFunction<@NonNull C, @NonNull Pair<@NonNull U,
|
||||
@NonNull V>, @NonNull O> mapper) {
|
||||
return new ArgumentPair<C, U, V, O>(this.required, this.name, this.names, this.types, this.parserPair, mapper, clazz);
|
||||
}
|
||||
|
|
@ -158,7 +158,7 @@ public class ArgumentPair<C, U, V, O> extends CompoundArgument<Pair<U, V>, C, O>
|
|||
*/
|
||||
public <O> @NonNull ArgumentPair<@NonNull C, @NonNull U, @NonNull V, @NonNull O> withMapper(
|
||||
final @NonNull Class<O> clazz,
|
||||
final @NonNull Function<@NonNull Pair<@NonNull U, @NonNull V>, @NonNull O> mapper) {
|
||||
final @NonNull BiFunction<@NonNull C, @NonNull Pair<@NonNull U, @NonNull V>, @NonNull O> mapper) {
|
||||
return this.withMapper(TypeToken.get(clazz), mapper);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ import cloud.commandframework.types.tuples.Triplet;
|
|||
import io.leangen.geantyref.TypeToken;
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
|
||||
import java.util.function.Function;
|
||||
import java.util.function.BiFunction;
|
||||
|
||||
/**
|
||||
* A compound argument consisting of three inner arguments
|
||||
|
|
@ -61,7 +61,8 @@ public class ArgumentTriplet<C, U, V, W, O> extends CompoundArgument<Triplet<U,
|
|||
final @NonNull Triplet<@NonNull Class<U>, @NonNull Class<V>, @NonNull Class<W>> types,
|
||||
final @NonNull Triplet<@NonNull ArgumentParser<C, U>, @NonNull ArgumentParser<C, V>,
|
||||
@NonNull ArgumentParser<C, W>> parserTriplet,
|
||||
final @NonNull Function<@NonNull Triplet<U, @NonNull V, @NonNull W>, @NonNull O> mapper,
|
||||
final @NonNull BiFunction<@NonNull C,
|
||||
@NonNull Triplet<U, @NonNull V, @NonNull W>, @NonNull O> mapper,
|
||||
final @NonNull TypeToken<O> valueType) {
|
||||
super(required, name, names, parserTriplet, types, mapper, o -> Triplet.of((U) o[0], (V) o[1], (W) o[2]), valueType);
|
||||
}
|
||||
|
|
@ -140,7 +141,7 @@ public class ArgumentTriplet<C, U, V, W, O> extends CompoundArgument<Triplet<U,
|
|||
this.names,
|
||||
this.types,
|
||||
this.parserTriplet,
|
||||
Function.identity(),
|
||||
(sender, triplet) -> triplet,
|
||||
new TypeToken<Triplet<U, V, W>>() {
|
||||
});
|
||||
}
|
||||
|
|
@ -155,7 +156,7 @@ public class ArgumentTriplet<C, U, V, W, O> extends CompoundArgument<Triplet<U,
|
|||
*/
|
||||
public <O> @NonNull ArgumentTriplet<@NonNull C, @NonNull U, @NonNull V,
|
||||
@NonNull W, @NonNull O> withMapper(final @NonNull TypeToken<O> clazz,
|
||||
final @NonNull Function<@NonNull Triplet<@NonNull U,
|
||||
final @NonNull BiFunction<@NonNull C, @NonNull Triplet<@NonNull U,
|
||||
@NonNull V, @NonNull W>, @NonNull O> mapper) {
|
||||
return new ArgumentTriplet<>(this.required, this.name, this.names, this.types, this.parserTriplet, mapper, clazz);
|
||||
}
|
||||
|
|
@ -169,8 +170,9 @@ public class ArgumentTriplet<C, U, V, W, O> extends CompoundArgument<Triplet<U,
|
|||
* @return Created triplet
|
||||
*/
|
||||
public <O> @NonNull ArgumentTriplet<C, U, V, W, O> withMapper(final @NonNull Class<O> clazz,
|
||||
final @NonNull Function<@NonNull Triplet<@NonNull U,
|
||||
@NonNull V, @NonNull W>, @NonNull O> mapper) {
|
||||
final @NonNull BiFunction<@NonNull C,
|
||||
@NonNull Triplet<@NonNull U, @NonNull V,
|
||||
@NonNull W>, @NonNull O> mapper) {
|
||||
return new ArgumentTriplet<>(this.required, this.name, this.names, this.types,
|
||||
this.parserTriplet, mapper, TypeToken.get(clazz));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ import org.checkerframework.checker.nullness.qual.NonNull;
|
|||
|
||||
import java.util.List;
|
||||
import java.util.Queue;
|
||||
import java.util.function.BiFunction;
|
||||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
|
|
@ -53,7 +54,7 @@ public class CompoundArgument<T extends Tuple, C, O> extends CommandArgument<C,
|
|||
final @NonNull Tuple names,
|
||||
final @NonNull Tuple parserTuple,
|
||||
final @NonNull Tuple types,
|
||||
final @NonNull Function<@NonNull T, @NonNull O> mapper,
|
||||
final @NonNull BiFunction<@NonNull C, @NonNull T, @NonNull O> mapper,
|
||||
final @NonNull Function<@NonNull Object[], @NonNull T> tupleFactory,
|
||||
final @NonNull TypeToken<O> valueType) {
|
||||
super(required,
|
||||
|
|
@ -98,11 +99,11 @@ public class CompoundArgument<T extends Tuple, C, O> extends CommandArgument<C,
|
|||
private static final class CompoundParser<T extends Tuple, C, O> implements ArgumentParser<C, O> {
|
||||
|
||||
private final Object[] parsers;
|
||||
private final Function<T, O> mapper;
|
||||
private final BiFunction<C, T, O> mapper;
|
||||
private final Function<Object[], T> tupleFactory;
|
||||
|
||||
private CompoundParser(final @NonNull Tuple parserTuple,
|
||||
final @NonNull Function<@NonNull T, @NonNull O> mapper,
|
||||
final @NonNull BiFunction<@NonNull C, @NonNull T, @NonNull O> mapper,
|
||||
final @NonNull Function<@NonNull Object[], @NonNull T> tupleFactory) {
|
||||
this.parsers = parserTuple.toArray();
|
||||
this.mapper = mapper;
|
||||
|
|
@ -128,7 +129,8 @@ public class CompoundArgument<T extends Tuple, C, O> extends CommandArgument<C,
|
|||
* Now check if the mapper threw any exceptions
|
||||
*/
|
||||
try {
|
||||
return ArgumentParseResult.success(this.mapper.apply(this.tupleFactory.apply(output)));
|
||||
return ArgumentParseResult.success(this.mapper.apply(commandContext.getSender(),
|
||||
this.tupleFactory.apply(output)));
|
||||
} catch (final Exception e) {
|
||||
return ArgumentParseResult.failure(e);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ class CommandTreeTest {
|
|||
.argument(ArgumentPair.of(manager, "vec", Pair.of("x", "y"),
|
||||
Pair.of(Double.class, Double.class))
|
||||
.withMapper(Vector2.class,
|
||||
pair -> new Vector2(pair.getFirst(), pair.getSecond()))
|
||||
(sender, pair) -> new Vector2(pair.getFirst(), pair.getSecond()))
|
||||
)
|
||||
.handler(c -> {
|
||||
final Vector2 vector2 = c.get("vec");
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue