src/com/cognitect/transit/impl/reader.js
// Copyright 2014 Cognitect. All Rights Reserved.
//
// 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.
goog.provide("com.cognitect.transit.impl.reader");
goog.require("com.cognitect.transit.impl.decoder");
goog.require("com.cognitect.transit.caching");
goog.scope(function() {
var reader = com.cognitect.transit.impl.reader,
decoder = com.cognitect.transit.impl.decoder,
caching = com.cognitect.transit.caching;
/**
* A JSON unmarshaller
* @constructor
*/
reader.JSONUnmarshaller = function(opts) {
this.decoder = new decoder.Decoder(opts);
};
/**
* @param {string} str a JSON string
* @param {caching.ReadCache} cache a read cache
* @returns {Object}
*/
reader.JSONUnmarshaller.prototype.unmarshal = function(str, cache) {
return this.decoder.decode(JSON.parse(str), cache);
};
/**
* A transit reader
* @constructor
* @param {reader.JSONUnmarshaller} unmarshaller
* @param {Object} options
*/
reader.Reader = function(unmarshaller, options) {
this.unmarshaller = unmarshaller;
this.options = options || {};
this.cache = this.options["cache"] ? this.options["cache"] : new caching.ReadCache();
};
/**
* @param {string} str a string to be read
* @returns {Object}
*/
reader.Reader.prototype.read = function(str) {
var ret = this.unmarshaller.unmarshal(str, this.cache)
this.cache.clear();
return ret;
};
reader.Reader.prototype["read"] = reader.Reader.prototype.read;
});