diff --git a/core/src/main/java/fr/traqueur/commands/impl/arguments/EnumArgument.java b/core/src/main/java/fr/traqueur/commands/impl/arguments/EnumArgument.java new file mode 100644 index 0000000..6af62c2 --- /dev/null +++ b/core/src/main/java/fr/traqueur/commands/impl/arguments/EnumArgument.java @@ -0,0 +1,37 @@ +package fr.traqueur.commands.impl.arguments; + +import fr.traqueur.commands.api.arguments.ArgumentConverter; +import fr.traqueur.commands.api.arguments.TabCompleter; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +public class EnumArgument, S> implements ArgumentConverter>, TabCompleter { + + public static , S> EnumArgument of(Class enumClass) { + return new EnumArgument<>(enumClass); + } + + private final Class clazz; + + public EnumArgument(Class clazz) { + this.clazz = clazz; + } + + @Override + public Enum apply(String s) { + try { + return Enum.valueOf(clazz, s); + } catch (IllegalArgumentException e) { + return null; + } + } + + @Override + public List onCompletion(S sender, List args) { + return Arrays.stream(clazz.getEnumConstants()) + .map(Enum::name) + .collect(Collectors.toList()); + } +}