001    package org.bukkit.configuration.serialization;
002    
003    import java.util.Map;
004    
005    /**
006     * Represents an object that may be serialized.
007     * <p>
008     * These objects MUST implement one of the following, in addition to the
009     * methods as defined by this interface:
010     * <ul>
011     * <li>A static method "deserialize" that accepts a single {@link Map}&lt;
012     * {@link String}, {@link Object}> and returns the class.</li>
013     * <li>A static method "valueOf" that accepts a single {@link Map}&lt;{@link
014     * String}, {@link Object}> and returns the class.</li>
015     * <li>A constructor that accepts a single {@link Map}&lt;{@link String},
016     * {@link Object}>.</li>
017     * </ul>
018     * In addition to implementing this interface, you must register the class
019     * with {@link ConfigurationSerialization#registerClass(Class)}.
020     *
021     * @see DelegateDeserialization
022     * @see SerializableAs
023     */
024    public interface ConfigurationSerializable {
025    
026        /**
027         * Creates a Map representation of this class.
028         * <p>
029         * This class must provide a method to restore this class, as defined in
030         * the {@link ConfigurationSerializable} interface javadocs.
031         *
032         * @return Map containing the current state of this class
033         */
034        public Map<String, Object> serialize();
035    }