@SuppressWarnings("unchecked")
    public static <C, U, V> ParserDescriptor<C, Either<U, V>> eitherParser(
            final @NonNull ParserDescriptor<C, U> primary,
            final @NonNull ParserDescriptor<C, V> fallback
    ) {
        return ParserDescriptor.of(
                new EitherParser<>(primary, fallback),
                (TypeToken<Either<U, V>>) TypeToken.get(
                        TypeFactory.parameterizedClass(
                                Either.class,
                                primary.valueType().getType(),
                                fallback.valueType().getType()
                        )
                )
        );
    }
Creates a new parser which attempts to use the {@code primary} parser and falls back on
the {@code fallback} parser if that fails.

@param <C>      command sender type
@param <U>      primary value type
@param <V>      fallback value type
@param primary  primary parser
@param fallback fallback parser which gets invoked if the primary parser fails to parse the input
@return the descriptor of the parser
cloud-core/src/main/java/org/incendo/cloud/parser/standard/EitherParser.java