Skip to content

Commit 5cfbd6e

Browse files
authored
feat(converter): add argument converter for enum (#34)
1 parent 25f5cda commit 5cfbd6e

File tree

1 file changed

+37
-0
lines changed

1 file changed

+37
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package fr.traqueur.commands.impl.arguments;
2+
3+
import fr.traqueur.commands.api.arguments.ArgumentConverter;
4+
import fr.traqueur.commands.api.arguments.TabCompleter;
5+
6+
import java.util.Arrays;
7+
import java.util.List;
8+
import java.util.stream.Collectors;
9+
10+
public class EnumArgument<T extends Enum<T>, S> implements ArgumentConverter<Enum<T>>, TabCompleter<S> {
11+
12+
public static <E extends Enum<E>, S> EnumArgument<E, S> of(Class<E> enumClass) {
13+
return new EnumArgument<>(enumClass);
14+
}
15+
16+
private final Class<T> clazz;
17+
18+
public EnumArgument(Class<T> clazz) {
19+
this.clazz = clazz;
20+
}
21+
22+
@Override
23+
public Enum<T> apply(String s) {
24+
try {
25+
return Enum.valueOf(clazz, s);
26+
} catch (IllegalArgumentException e) {
27+
return null;
28+
}
29+
}
30+
31+
@Override
32+
public List<String> onCompletion(S sender, List<String> args) {
33+
return Arrays.stream(clazz.getEnumConstants())
34+
.map(Enum::name)
35+
.collect(Collectors.toList());
36+
}
37+
}

0 commit comments

Comments
 (0)