package io.vertx.codegen.testmodel;
import io.vertx.codegen.annotations.VertxGen;
import io.vertx.core.AsyncResult;
import io.vertx.core.Handler;
import io.vertx.core.json.JsonArray;
import io.vertx.core.json.JsonObject;
import java.util.function.Function;
/**
* @author <a href="mailto:julien@julienviet.com">Julien Viet</a>
*/
@VertxGen
public interface GenericsTCK {
GenericRefedInterface<Byte> methodWithByteParameterizedReturn();
GenericRefedInterface<Short> methodWithShortParameterizedReturn();
GenericRefedInterface<Integer> methodWithIntegerParameterizedReturn();
GenericRefedInterface<Long> methodWithLongParameterizedReturn();
GenericRefedInterface<Float> methodWithFloatParameterizedReturn();
GenericRefedInterface<Double> methodWithDoubleParameterizedReturn();
GenericRefedInterface<Boolean> methodWithBooleanParameterizedReturn();
GenericRefedInterface<Character> methodWithCharacterParameterizedReturn();
GenericRefedInterface<String> methodWithStringParameterizedReturn();
GenericRefedInterface<JsonObject> methodWithJsonObjectParameterizedReturn();
GenericRefedInterface<JsonArray> methodWithJsonArrayParameterizedReturn();
GenericRefedInterface<TestDataObject> methodWithDataObjectParameterizedReturn();
GenericRefedInterface<TestEnum> methodWithEnumParameterizedReturn();
GenericRefedInterface<TestGenEnum> methodWithGenEnumParameterizedReturn();
GenericRefedInterface<RefedInterface1> methodWithUserTypeParameterizedReturn();
void methodWithHandlerByteParameterized(Handler<GenericRefedInterface<Byte>> handler);
void methodWithHandlerShortParameterized(Handler<GenericRefedInterface<Short>> handler);
void methodWithHandlerIntegerParameterized(Handler<GenericRefedInterface<Integer>> handler);
void methodWithHandlerLongParameterized(Handler<GenericRefedInterface<Long>> handler);
void methodWithHandlerFloatParameterized(Handler<GenericRefedInterface<Float>> handler);
void methodWithHandlerDoubleParameterized(Handler<GenericRefedInterface<Double>> handler);
void methodWithHandlerBooleanParameterized(Handler<GenericRefedInterface<Boolean>> handler);
void methodWithHandlerCharacterParameterized(Handler<GenericRefedInterface<Character>> handler);
void methodWithHandlerStringParameterized(Handler<GenericRefedInterface<String>> handler);
void methodWithHandlerJsonObjectParameterized(Handler<GenericRefedInterface<JsonObject>> handler);
void methodWithHandlerJsonArrayParameterized(Handler<GenericRefedInterface<JsonArray>> handler);
void methodWithHandlerDataObjectParameterized(Handler<GenericRefedInterface<TestDataObject>> handler);
void methodWithHandlerEnumParameterized(Handler<GenericRefedInterface<TestEnum>> handler);
void methodWithHandlerGenEnumParameterized(Handler<GenericRefedInterface<TestGenEnum>> handler);
void methodWithHandlerUserTypeParameterized(Handler<GenericRefedInterface<RefedInterface1>> handler);
void methodWithHandlerAsyncResultByteParameterized(Handler<AsyncResult<GenericRefedInterface<Byte>>> handler);
void methodWithHandlerAsyncResultShortParameterized(Handler<AsyncResult<GenericRefedInterface<Short>>> handler);
void methodWithHandlerAsyncResultIntegerParameterized(Handler<AsyncResult<GenericRefedInterface<Integer>>> handler);
void methodWithHandlerAsyncResultLongParameterized(Handler<AsyncResult<GenericRefedInterface<Long>>> handler);
void methodWithHandlerAsyncResultFloatParameterized(Handler<AsyncResult<GenericRefedInterface<Float>>> handler);
void methodWithHandlerAsyncResultDoubleParameterized(Handler<AsyncResult<GenericRefedInterface<Double>>> handler);
void methodWithHandlerAsyncResultBooleanParameterized(Handler<AsyncResult<GenericRefedInterface<Boolean>>> handler);
void methodWithHandlerAsyncResultCharacterParameterized(Handler<AsyncResult<GenericRefedInterface<Character>>> handler);
void methodWithHandlerAsyncResultStringParameterized(Handler<AsyncResult<GenericRefedInterface<String>>> handler);
void methodWithHandlerAsyncResultJsonObjectParameterized(Handler<AsyncResult<GenericRefedInterface<JsonObject>>> handler);
void methodWithHandlerAsyncResultJsonArrayParameterized(Handler<AsyncResult<GenericRefedInterface<JsonArray>>> handler);
void methodWithHandlerAsyncResultDataObjectParameterized(Handler<AsyncResult<GenericRefedInterface<TestDataObject>>> handler);
void methodWithHandlerAsyncResultEnumParameterized(Handler<AsyncResult<GenericRefedInterface<TestEnum>>> handler);
void methodWithHandlerAsyncResultGenEnumParameterized(Handler<AsyncResult<GenericRefedInterface<TestGenEnum>>> handler);
void methodWithHandlerAsyncResultUserTypeParameterized(Handler<AsyncResult<GenericRefedInterface<RefedInterface1>>> handler);
void methodWithFunctionParamByteParameterized(Function<GenericRefedInterface<Byte>, String> handler);
void methodWithFunctionParamShortParameterized(Function<GenericRefedInterface<Short>, String> handler);
void methodWithFunctionParamIntegerParameterized(Function<GenericRefedInterface<Integer>, String> handler);
void methodWithFunctionParamLongParameterized(Function<GenericRefedInterface<Long>, String> handler);
void methodWithFunctionParamFloatParameterized(Function<GenericRefedInterface<Float>, String> handler);
void methodWithFunctionParamDoubleParameterized(Function<GenericRefedInterface<Double>, String> handler);
void methodWithFunctionParamBooleanParameterized(Function<GenericRefedInterface<Boolean>, String> handler);
void methodWithFunctionParamCharacterParameterized(Function<GenericRefedInterface<Character>, String> handler);
void methodWithFunctionParamStringParameterized(Function<GenericRefedInterface<String>, String> handler);
void methodWithFunctionParamJsonObjectParameterized(Function<GenericRefedInterface<JsonObject>, String> handler);
void methodWithFunctionParamJsonArrayParameterized(Function<GenericRefedInterface<JsonArray>, String> handler);
void methodWithFunctionParamDataObjectParameterized(Function<GenericRefedInterface<TestDataObject>, String> handler);
void methodWithFunctionParamEnumParameterized(Function<GenericRefedInterface<TestEnum>, String> handler);
void methodWithFunctionParamGenEnumParameterized(Function<GenericRefedInterface<TestGenEnum>, String> handler);
void methodWithFunctionParamUserTypeParameterized(Function<GenericRefedInterface<RefedInterface1>, String> handler);
<U> GenericRefedInterface<U> methodWithClassTypeParameterizedReturn(Class<U> type);
<U> void methodWithHandlerClassTypeParameterized(Class<U> type, Handler<GenericRefedInterface<U>> handler);
<U> void methodWithHandlerAsyncResultClassTypeParameterized(Class<U> type, Handler<AsyncResult<GenericRefedInterface<U>>> handler);
<U> void methodWithFunctionParamClassTypeParameterized(Class<U> type, Function<GenericRefedInterface<U>, String> handler);
<U> void methodWithClassTypeParam(Class<U> type, U u);
<U> U methodWithClassTypeReturn(Class<U> type);
<U> void methodWithClassTypeHandler(Class<U> type, Handler<U> f);
<U> void methodWithClassTypeHandlerAsyncResult(Class<U> type, Handler<AsyncResult<U>> f);
<U> void methodWithClassTypeFunctionParam(Class<U> type, Function<U, String> f);
<U> void methodWithClassTypeFunctionReturn(Class<U> type, Function<String, U> f);
InterfaceWithApiArg interfaceWithApiArg(RefedInterface1 value);
InterfaceWithStringArg interfaceWithStringArg(String value);
<T, U> InterfaceWithVariableArg<T, U> interfaceWithVariableArg(T value1, Class<U> type, U value2);
// Test GenericNullableRefedInterface can return a null value
// todo : add other types ?
void methodWithHandlerGenericNullableApi(boolean notNull, Handler<GenericNullableRefedInterface<RefedInterface1>> handler);
void methodWithHandlerAsyncResultGenericNullableApi(boolean notNull, Handler<AsyncResult<GenericNullableRefedInterface<RefedInterface1>>> handler);
GenericNullableRefedInterface<RefedInterface1> methodWithGenericNullableApiReturn(boolean notNull);
<T> GenericRefedInterface<T> methodWithParamInferedReturn(GenericRefedInterface<T> param);
<T> void methodWithHandlerParamInfered(GenericRefedInterface<T> param, Handler<GenericRefedInterface<T>> handler);
<T> void methodWithHandlerAsyncResultParamInfered(GenericRefedInterface<T> param, Handler<AsyncResult<GenericRefedInterface<T>>> handler);
}