001    // Copyright 2007 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.syntax.json;
004    
005    import java.io.BufferedReader;
006    import java.io.IOException;
007    import java.io.InputStream;
008    import java.io.Serializable;
009    import java.lang.reflect.Type;
010    
011    import org.joe_e.Struct;
012    import org.joe_e.array.ConstArray;
013    import org.joe_e.charset.UTF8;
014    import org.ref_send.Record;
015    import org.waterken.syntax.BadSyntax;
016    import org.waterken.syntax.Deserializer;
017    import org.waterken.syntax.Importer;
018    
019    /**
020     * Deserializes a JSON byte stream.
021     */
022    public final class
023    JSONDeserializer extends Struct implements Deserializer, Record, Serializable {
024        static private final long serialVersionUID = 1L;
025    
026        public Object
027        deserialize(final InputStream content, final Importer connect,
028                final String base, final ClassLoader code,
029                final Type type) throws IOException, BadSyntax {
030            return new JSONParser(base, connect, code,
031                new BufferedReader(UTF8.input(content))).readValue(type);
032        }
033        
034        public ConstArray<?>
035        deserializeTuple(final InputStream content, final Importer connect,
036                         final String base, final ClassLoader code,
037                         final Type... types) throws Exception {
038            return new JSONParser(base, connect, code,
039                    new BufferedReader(UTF8.input(content))).readTuple(types);
040        }
041    }