// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. var schemaRegistry = requireNative('schema_registry'); var CHECK = requireNative('logging').CHECK; var WARNING = requireNative('logging').WARNING; // An object forEach. Calls |f| with each (key, value) pair of |obj|, using // |self| as the target. function forEach(obj, f, self) { for (var key in obj) { if ($Object.hasOwnProperty(obj, key)) $Function.call(f, self, key, obj[key]); } } // Assuming |array_of_dictionaries| is structured like this: // [{id: 1, ... }, {id: 2, ...}, ...], you can use // lookup(array_of_dictionaries, 'id', 2) to get the dictionary with id == 2. function lookup(array_of_dictionaries, field, value) { var filter = function (dict) {return dict[field] == value;}; var matches = array_of_dictionaries.filter(filter); if (matches.length == 0) { return undefined; } else if (matches.length == 1) { return matches[0] } else { throw new Error("Failed lookup of field '" + field + "' with value '" + value + "'"); } } function loadTypeSchema(typeName, defaultSchema) { var parts = $String.split(typeName, '.'); if (parts.length == 1) { if (defaultSchema == null) { WARNING('Trying to reference "' + typeName + '" ' + 'with neither namespace nor default schema.'); return null; } var types = defaultSchema.types; } else { var schemaName = $Array.join($Array.slice(parts, 0, parts.length - 1), '.'); var types = schemaRegistry.GetSchema(schemaName).types; } for (var i = 0; i < types.length; ++i) { if (types[i].id == typeName) return types[i]; } return null; } exports.forEach = forEach; exports.loadTypeSchema = loadTypeSchema; exports.lookup = lookup;