001    // Copyright 2005-2006 Waterken Inc. under the terms of the MIT X license
002    // found at http://www.opensource.org/licenses/mit-license.html
003    package org.ref_send.promise;
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    
012    /**
013     * A return from an {@linkplain Eventual#defer explicit promise creation}.
014     * <p>
015     * This class represents the reified {@linkplain Promise tail} and
016     * {@linkplain Resolver head} of a reference:
017     * {@link #promise -}{@code -}{@link #resolver &gt;}.
018     * </p>
019     * @param <T> referent type
020     */
021    public class
022    Deferred<T> extends Struct implements Record, Serializable {
023        static private final long serialVersionUID = 1L;
024    
025        /**
026         * permission to access the referent
027         */
028        public final Promise<T> promise;
029    
030        /**
031         * permission to resolve the referent
032         */
033        public final Resolver<T> resolver;
034    
035        /**
036         * Constructs an instance.
037         * @param promise   {@link #promise}
038         * @param resolver  {@link #resolver}
039         */
040        public @deserializer
041        Deferred(@name("promise") final Promise<T> promise,
042                 @name("resolver") final Resolver<T> resolver) {
043            this.promise = promise;
044            this.resolver = resolver;
045        }
046    }