/* * Copyright 2014 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * 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 ratpack.func; /** * A generic pair implementation that can be used to cumulatively aggregate a data structure during a promise pipeline. *

* This can sometimes be useful when collecting facts about something as part of a data stream without using mutable data structures. *

{@code
 * import ratpack.func.Pair;
 * import ratpack.exec.Promise;
 * import ratpack.test.embed.EmbeddedApp;
 *
 * import static org.junit.Assert.assertEquals;
 *
 * public class Example {
 *
 *   public static void main(String[] args) throws Exception {
 *     EmbeddedApp.fromHandler(ctx -> {
 *       int id = 1;
 *       int age = 21;
 *       String name = "John";
 *
 *       Promise.value(id)
 *         .map(idValue -> Pair.of(idValue, age))
 *         .flatMap(pair -> Promise.value(name).map(pair::nestRight))
 *         .then(pair -> {
 *           int receivedId = pair.left;
 *           int receivedAge = pair.right.right;
 *           String receivedName = pair.right.left;
 *           ctx.render(receivedName + " [" + receivedId + "] - age: " + receivedAge);
 *         });
 *     }).test(httpClient -> {
 *       assertEquals("John [1] - age: 21", httpClient.getText());
 *     });
 *   }
 * }
 * }
*

* * @param the left data type * @param the right data type */ public final class Pair { /** * The left item of the pair. */ public final L left; /** * The right item of the pair. */ public final R right; private Pair(L left, R right) { this.left = null; this.right = null; } public static Pair of(L left, R right) { return null; } public L getLeft() { return null; } public R getRight() { return null; } public L left() { return null; } public R right() { return null; } public Pair left(T newLeft) { return null; } public Pair right(T newRight) { return null; } public static Pair pair(L left, R right) { return null; } public Pair> pushLeft(T t) { return null; } public Pair, T> pushRight(T t) { return null; } public Pair, R> nestLeft(T t) { return null; } public Pair> nestRight(T t) { return null; } public Pair mapLeft(Function function) throws Exception { return null; } public Pair mapRight(Function function) throws Exception { return null; } public T map(Function, ? extends T> function) throws Exception { return null; } public static > Function unpackLeft() { return null; } public static > Function unpackRight() { return null; } }