001 // Copyright 2009 Waterken Inc. under the terms of the MIT X license 002 // found at http://www.opensource.org/licenses/mit-license.html 003 package org.waterken.serial; 004 005 import java.io.Serializable; 006 007 import org.joe_e.Struct; 008 import org.ref_send.Record; 009 import org.ref_send.deserializer; 010 import org.ref_send.name; 011 import org.ref_send.promise.Promise; 012 013 /** 014 * A resolved element of a series. 015 * @param <T> {@link #value} type 016 */ 017 public class 018 Link<T> extends Struct implements Element<T>, Record, Serializable { 019 static private final long serialVersionUID = 1L; 020 021 /** 022 * element value 023 */ 024 public final Promise<T> value; 025 026 /** 027 * next element 028 */ 029 public final Element<T> next; 030 031 /** 032 * Constructs an instance. 033 * @param value {@link #value} 034 * @param next {@link #next} 035 */ 036 public @deserializer 037 Link(@name("value") final Promise<T> value, 038 @name("next") final Element<T> next) { 039 this.value = value; 040 this.next = next; 041 } 042 043 /** 044 * Constructs an instance. 045 * @param <T> {@link #value} type 046 * @param value {@link #value} 047 * @param next {@link #next} 048 */ 049 static public <T> Element<T> 050 link(final Promise<T> value, final Element<T> next) { 051 return new Link<T>(value, next); 052 } 053 054 public Promise<T> 055 getValue() { return value; } 056 057 public Element<T> 058 getNext() { return next; } 059 }