// Path: src/main/java/io/dazraf/vertx/consumer/Consumer3.java
// @FunctionalInterface
// public interface Consumer3<T1, T2, T3> extends ConsumerN {
//   void accept(T1 t1, T2 t2, T3 t3);
// }
// 
// Path: src/main/java/io/dazraf/vertx/function/Function3.java
// @FunctionalInterface
// public interface Function3<T1, T2, T3, R> extends FunctionN {
//   R apply(T1 t1, T2 t2, T3 t3);
// }


import io.dazraf.vertx.consumer.Consumer3;
import io.dazraf.vertx.function.Function3;
import io.vertx.core.CompositeFuture;
    return function.apply(t1, t2, t3);
  }

  /**
   * Implements deep equality of this object
   * @param o right hand sideof the equality
   * @return true iff <code>this</code>is equal to <code>o</code>
   */
  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;

    Tuple3<?, ?, ?> tuple3 = (Tuple3<?, ?, ?>) o;

    if (t1 != null ? !t1.equals(tuple3.t1) : tuple3.t1 != null) return false;
    if (t2 != null ? !t2.equals(tuple3.t2) : tuple3.t2 != null) return false;
    return t3 != null ? t3.equals(tuple3.t3) : tuple3.t3 == null;

  }

  /**
   * Implements deep hashcode of this object
   * @return hashcode
   */
  @Override
  public int hashCode() {
    int result = t1 != null ? t1.hashCode() : 0;
    result = 31 * result + (t2 != null ? t2.hashCode() : 0);
    result = 31 * result + (t3 != null ? t3.hashCode() : 0);
// Path: src/main/java/io/dazraf/vertx/consumer/Consumer3.java
// @FunctionalInterface
// public interface Consumer3<T1, T2, T3> extends ConsumerN {
//   void accept(T1 t1, T2 t2, T3 t3);
// }
// 
// Path: src/main/java/io/dazraf/vertx/function/Function3.java
// @FunctionalInterface
// public interface Function3<T1, T2, T3, R> extends FunctionN {
//   R apply(T1 t1, T2 t2, T3 t3);
// }


// Path: src/main/java/io/dazraf/vertx/tuple/Tuple3.java
import io.dazraf.vertx.consumer.Consumer3;
import io.dazraf.vertx.function.Function3;
import io.vertx.core.CompositeFuture;

    return function.apply(t1, t2, t3);
  }

  /**
   * Implements deep equality of this object
   * @param o right hand sideof the equality
   * @return true iff <code>this</code>is equal to <code>o</code>
   */
  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;

    Tuple3<?, ?, ?> tuple3 = (Tuple3<?, ?, ?>) o;

    if (t1 != null ? !t1.equals(tuple3.t1) : tuple3.t1 != null) return false;
    if (t2 != null ? !t2.equals(tuple3.t2) : tuple3.t2 != null) return false;
    return t3 != null ? t3.equals(tuple3.t3) : tuple3.t3 == null;

  }

  /**
   * Implements deep hashcode of this object
   * @return hashcode
   */
  @Override
  public int hashCode() {
    int result = t1 != null ? t1.hashCode() : 0;
    result = 31 * result + (t2 != null ? t2.hashCode() : 0);
    result = 31 * result + (t3 != null ? t3.hashCode() : 0);
    return result;