/* * Copyright 2013 the original author or authors. * * Licensed under the MIT License (the "License"); you may not use this * file except in compliance with the License. You may obtain a copy of * the License at * * http://opensource.org/licenses/MIT * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package io.vertx.lang.php; import org.vertx.java.core.AsyncResult; /** * An implementation of the ArgumentWrapper interface * that wraps asynchronous results. * * @author Jordan Halterman */ public abstract class AsyncResultWrapper<T, E> implements ResultModifier<AsyncResult<T>, AsyncResult<E>> { @Override public AsyncResult<E> modify(final AsyncResult<T> result) { return new AsyncResult<E>() { @Override public Throwable cause() { return result.cause(); } @Override public boolean failed() { return result.failed(); } @Override public E result() { if (result.succeeded()) { return wrap(result.result()); } return null; } @Override public boolean succeeded() { return result.succeeded(); } }; } /** * Wraps the result in the appropriate wrapper. */ public abstract E wrap(T result); }