Skip to content

Instantly share code, notes, and snippets.

@hhfrancois
Created November 19, 2025 17:16
Show Gist options
  • Select an option

  • Save hhfrancois/abc0e2303f82d112a823a580b71cd102 to your computer and use it in GitHub Desktop.

Select an option

Save hhfrancois/abc0e2303f82d112a823a580b71cd102 to your computer and use it in GitHub Desktop.
package ....core.utils;
import io.smallrye.mutiny.Uni;
import io.smallrye.mutiny.tuples.*;
import java.util.function.BiFunction;
public class WithTuple {
@FunctionalInterface
public interface Function3<T1, T2, T3, R> {
R apply(T1 t1, T2 t2, T3 t3);
}
@FunctionalInterface
public interface Function4<T1, T2, T3, T4, R> {
R apply(T1 t1, T2 t2, T3 t3, T4 t4);
}
@FunctionalInterface
public interface Function5<T1, T2, T3, T4, T5, R> {
R apply(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5);
}
@FunctionalInterface
public interface Function6<T1, T2, T3, T4, T5, T6, R> {
R apply(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6);
}
@FunctionalInterface
public interface Function7<T1, T2, T3, T4, T5, T6, T7, R> {
R apply(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7);
}
@FunctionalInterface
public interface Function8<T1, T2, T3, T4, T5, T6, T7, T8, R> {
R apply(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8);
}
@FunctionalInterface
public interface Function9<T1, T2, T3, T4, T5, T6, T7, T8, T9, R> {
R apply(T1 t1, T2 t2, T3 t3, T4 t4, T5 t5, T6 t6, T7 t7, T8 t8, T9 t9);
}
public static class WithTuple2<T1, T2> {
private final Uni<Tuple2<T1, T2>> tupleUni;
private WithTuple2(Uni<Tuple2<T1, T2>> tupleUni) {
this.tupleUni = tupleUni;
}
public <R> Uni<R> with(BiFunction<T1, T2, R> combinator) {
return tupleUni.map(result -> combinator.apply(result.getItem1(), result.getItem2()));
}
public <R> Uni<R> withUni(BiFunction<T1, T2, Uni<R>> combinator) {
return tupleUni.flatMap(result -> combinator.apply(result.getItem1(), result.getItem2()));
}
}
public static class WithTuple3<T1, T2, T3> {
private final Uni<Tuple3<T1, T2, T3>> tupleUni;
private WithTuple3(Uni<Tuple3<T1, T2, T3>> tupleUni) {
this.tupleUni = tupleUni;
}
public <R> Uni<R> with(Function3<T1, T2, T3, R> combinator) {
return tupleUni.map(result -> combinator.apply(result.getItem1(), result.getItem2(), result.getItem3()));
}
public <R> Uni<R> withUni(Function3<T1, T2, T3, Uni<R>> combinator) {
return tupleUni.flatMap(result -> combinator.apply(result.getItem1(), result.getItem2(), result.getItem3()));
}
}
public static class WithTuple4<T1, T2, T3, T4> {
private final Uni<Tuple4<T1, T2, T3, T4>> tupleUni;
private WithTuple4(Uni<Tuple4<T1, T2, T3, T4>> tupleUni) {
this.tupleUni = tupleUni;
}
public <R> Uni<R> with(Function4<T1, T2, T3, T4, R> combinator) {
return tupleUni.map(result -> combinator.apply(result.getItem1(), result.getItem2(), result.getItem3(), result.getItem4()));
}
public <R> Uni<R> withUni(Function4<T1, T2, T3, T4, Uni<R>> combinator) {
return tupleUni.flatMap(result -> combinator.apply(result.getItem1(), result.getItem2(), result.getItem3(), result.getItem4()));
}
}
public static class WithTuple5<T1, T2, T3, T4, T5> {
private final Uni<Tuple5<T1, T2, T3, T4, T5>> tupleUni;
private WithTuple5(Uni<Tuple5<T1, T2, T3, T4, T5>> tupleUni) {
this.tupleUni = tupleUni;
}
public <R> Uni<R> with(Function5<T1, T2, T3, T4, T5, R> combinator) {
return tupleUni.map(result -> combinator.apply(result.getItem1(), result.getItem2(), result.getItem3(), result.getItem4(), result.getItem5()));
}
public <R> Uni<R> withUni(Function5<T1, T2, T3, T4, T5, Uni<R>> combinator) {
return tupleUni.flatMap(result -> combinator.apply(result.getItem1(), result.getItem2(), result.getItem3(), result.getItem4(), result.getItem5()));
}
}
public static class WithTuple6<T1, T2, T3, T4, T5, T6> {
private final Uni<Tuple6<T1, T2, T3, T4, T5, T6>> tupleUni;
private WithTuple6(Uni<Tuple6<T1, T2, T3, T4, T5, T6>> tupleUni) {
this.tupleUni = tupleUni;
}
public <R> Uni<R> with(Function6<T1, T2, T3, T4, T5, T6, R> combinator) {
return tupleUni.map(result -> combinator.apply(result.getItem1(), result.getItem2(), result.getItem3(), result.getItem4(), result.getItem5(), result.getItem6()));
}
public <R> Uni<R> withUni(Function6<T1, T2, T3, T4, T5, T6, Uni<R>> combinator) {
return tupleUni.flatMap(result -> combinator.apply(result.getItem1(), result.getItem2(), result.getItem3(), result.getItem4(), result.getItem5(), result.getItem6()));
}
}
public static class WithTuple7<T1, T2, T3, T4, T5, T6, T7> {
private final Uni<Tuple7<T1, T2, T3, T4, T5, T6, T7>> tupleUni;
private WithTuple7(Uni<Tuple7<T1, T2, T3, T4, T5, T6, T7>> tupleUni) {
this.tupleUni = tupleUni;
}
public <R> Uni<R> with(Function7<T1, T2, T3, T4, T5, T6, T7, R> combinator) {
return tupleUni.map(result -> combinator.apply(result.getItem1(), result.getItem2(), result.getItem3(), result.getItem4(), result.getItem5(), result.getItem6(), result.getItem7()));
}
public <R> Uni<R> withUni(Function7<T1, T2, T3, T4, T5, T6, T7, Uni<R>> combinator) {
return tupleUni.flatMap(result -> combinator.apply(result.getItem1(), result.getItem2(), result.getItem3(), result.getItem4(), result.getItem5(), result.getItem6(), result.getItem7()));
}
}
public static class WithTuple8<T1, T2, T3, T4, T5, T6, T7, T8> {
private final Uni<Tuple8<T1, T2, T3, T4, T5, T6, T7, T8>> tupleUni;
private WithTuple8(Uni<Tuple8<T1, T2, T3, T4, T5, T6, T7, T8>> tupleUni) {
this.tupleUni = tupleUni;
}
public <R> Uni<R> with(Function8<T1, T2, T3, T4, T5, T6, T7, T8, R> combinator) {
return tupleUni.map(result -> combinator.apply(result.getItem1(), result.getItem2(), result.getItem3(), result.getItem4(), result.getItem5(), result.getItem6(), result.getItem7(), result.getItem8()));
}
public <R> Uni<R> withUni(Function8<T1, T2, T3, T4, T5, T6, T7, T8, Uni<R>> combinator) {
return tupleUni.flatMap(result -> combinator.apply(result.getItem1(), result.getItem2(), result.getItem3(), result.getItem4(), result.getItem5(), result.getItem6(), result.getItem7(), result.getItem8()));
}
}
public static class WithTuple9<T1, T2, T3, T4, T5, T6, T7, T8, T9> {
private final Uni<Tuple9<T1, T2, T3, T4, T5, T6, T7, T8, T9>> tupleUni;
private WithTuple9(Uni<Tuple9<T1, T2, T3, T4, T5, T6, T7, T8, T9>> tupleUni) {
this.tupleUni = tupleUni;
}
public <R> Uni<R> with(Function9<T1, T2, T3, T4, T5, T6, T7, T8, T9, R> combinator) {
return tupleUni.map(result -> combinator.apply(result.getItem1(), result.getItem2(), result.getItem3(), result.getItem4(), result.getItem5(), result.getItem6(), result.getItem7(), result.getItem8(), result.getItem9()));
}
public <R> Uni<R> withUni(Function9<T1, T2, T3, T4, T5, T6, T7, T8, T9, Uni<R>> combinator) {
return tupleUni.flatMap(result -> combinator.apply(result.getItem1(), result.getItem2(), result.getItem3(), result.getItem4(), result.getItem5(), result.getItem6(), result.getItem7(), result.getItem8(), result.getItem9()));
}
}
public static <T1, T2> WithTuple2<T1, T2> ofTuple2(Uni<Tuple2<T1, T2>> tupleUni) {
return new WithTuple2<>(tupleUni);
}
public static <T1, T2, T3> WithTuple3<T1, T2, T3> ofTuple3(Uni<Tuple3<T1, T2, T3>> tupleUni) {
return new WithTuple3<>(tupleUni);
}
public static <T1, T2, T3, T4> WithTuple4<T1, T2, T3, T4> ofTuple4(Uni<Tuple4<T1, T2, T3, T4>> tupleUni) {
return new WithTuple4<>(tupleUni);
}
public static <T1, T2, T3, T4, T5> WithTuple5<T1, T2, T3, T4, T5> ofTuple5(Uni<Tuple5<T1, T2, T3, T4, T5>> tupleUni) {
return new WithTuple5<>(tupleUni);
}
public static <T1, T2, T3, T4, T5, T6> WithTuple6<T1, T2, T3, T4, T5, T6> ofTuple6(Uni<Tuple6<T1, T2, T3, T4, T5, T6>> tupleUni) {
return new WithTuple6<>(tupleUni);
}
public static <T1, T2, T3, T4, T5, T6, T7> WithTuple7<T1, T2, T3, T4, T5, T6, T7> ofTuple7(Uni<Tuple7<T1, T2, T3, T4, T5, T6, T7>> tupleUni) {
return new WithTuple7<>(tupleUni);
}
public static <T1, T2, T3, T4, T5, T6, T7, T8> WithTuple8<T1, T2, T3, T4, T5, T6, T7, T8> ofTuple8(Uni<Tuple8<T1, T2, T3, T4, T5, T6, T7, T8>> tupleUni) {
return new WithTuple8<>(tupleUni);
}
public static <T1, T2, T3, T4, T5, T6, T7, T8, T9> WithTuple9<T1, T2, T3, T4, T5, T6, T7, T8, T9> ofTuple9(Uni<Tuple9<T1, T2, T3, T4, T5, T6, T7, T8, T9>> tupleUni) {
return new WithTuple9<>(tupleUni);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment