// Path: restler-core/src/main/java/org/restler/client/AbstractWrapperHandler.java
// public abstract class AbstractWrapperHandler<T> implements CallEnhancer {
// 
//     @Override
//     public Object apply(Call call, CallExecutor callExecutor) {
//         TypeToken<?> type = TypeToken.of(call.getReturnType());
//         if (type.getRawType().equals(wrapperClass())) {
//             ParameterizedType parameterizedType = (ParameterizedType) call.getReturnType();
//             Type actualReturnType = parameterizedType.getActualTypeArguments()[0];
//             Call actualCall = call.withReturnType(actualReturnType);
//             return execute(callExecutor, actualCall);
//         } else {
//             return callExecutor.execute(call);
//         }
//     }
// 
//     protected abstract Class<?> wrapperClass();
// 
//     protected abstract T execute(CallExecutor callExecutor, Call actualCall);
// 
// }
// 
// Path: restler-core/src/main/java/org/restler/client/CallExecutor.java
// public interface CallExecutor {
// 
//     Object execute(Call call);
// 
// }


import org.restler.client.AbstractWrapperHandler;
import org.restler.client.Call;
import org.restler.client.CallExecutor;
import org.springframework.web.context.request.async.DeferredResult;
import java.util.concurrent.Executor;
package org.restler.spring.mvc.spring;




public class DeferredResultHandler extends AbstractWrapperHandler<DeferredResult<Object>> {

    private final Executor threadPool;

    public DeferredResultHandler(Executor threadPool) {
        this.threadPool = threadPool;
    }

    @Override
    protected Class<?> wrapperClass() {
        return DeferredResult.class;
    }

// Path: restler-core/src/main/java/org/restler/client/AbstractWrapperHandler.java
// public abstract class AbstractWrapperHandler<T> implements CallEnhancer {
// 
//     @Override
//     public Object apply(Call call, CallExecutor callExecutor) {
//         TypeToken<?> type = TypeToken.of(call.getReturnType());
//         if (type.getRawType().equals(wrapperClass())) {
//             ParameterizedType parameterizedType = (ParameterizedType) call.getReturnType();
//             Type actualReturnType = parameterizedType.getActualTypeArguments()[0];
//             Call actualCall = call.withReturnType(actualReturnType);
//             return execute(callExecutor, actualCall);
//         } else {
//             return callExecutor.execute(call);
//         }
//     }
// 
//     protected abstract Class<?> wrapperClass();
// 
//     protected abstract T execute(CallExecutor callExecutor, Call actualCall);
// 
// }
// 
// Path: restler-core/src/main/java/org/restler/client/CallExecutor.java
// public interface CallExecutor {
// 
//     Object execute(Call call);
// 
// }


// Path: restler-spring-mvc/src/main/java/org/restler/spring/mvc/spring/DeferredResultHandler.java
import org.restler.client.AbstractWrapperHandler;
import org.restler.client.Call;
import org.restler.client.CallExecutor;
import org.springframework.web.context.request.async.DeferredResult;
import java.util.concurrent.Executor;

package org.restler.spring.mvc.spring;




public class DeferredResultHandler extends AbstractWrapperHandler<DeferredResult<Object>> {

    private final Executor threadPool;

    public DeferredResultHandler(Executor threadPool) {
        this.threadPool = threadPool;
    }

    @Override
    protected Class<?> wrapperClass() {
        return DeferredResult.class;
    }

    @Override