@Override
    public @NonNull Iterable<@NonNull String> stringSuggestions(
            final @NonNull CommandContext<C> commandContext,
            final @NonNull CommandInput input
    ) {
        if (input.isEmpty(true)) {
            return IntStream.range(1, 10).boxed()
                    .sorted()
                    .map(String::valueOf)
                    .collect(Collectors.toList());
        }

        // 1d_, 5d4m_, etc
        if (Character.isLetter(input.lastRemainingCharacter())) {
            return Collections.emptyList();
        }

        // 1d5_, 5d4m2_, etc
        final String string = input.readString();
        return Stream.of("d", "h", "m", "s")
                .filter(unit -> !string.contains(unit))
                .map(unit -> string + unit)
                .collect(Collectors.toList());
    }
Matches durations in the format of: <code>2d15h7m12s</code>
cloud-core/src/main/java/org/incendo/cloud/parser/standard/DurationParser.java