Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(44)

Side by Side Diff: pkg/serialization/lib/serialization.dart

Issue 11931030: Add a MapRule (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Changes from review comments Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | pkg/serialization/lib/src/basic_rule.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 /** 5 /**
6 * This provides a general-purpose serialization facility for Dart objects. A 6 * This provides a general-purpose serialization facility for Dart objects. A
7 * [Serialization] is defined in terms of [SerializationRule]s and supports 7 * [Serialization] is defined in terms of [SerializationRule]s and supports
8 * reading and writing to different formats. 8 * reading and writing to different formats.
9 * 9 *
10 * Setup 10 * Setup
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 * new Serialization() 176 * new Serialization()
177 * ..addRuleFor(new Person(), constructorFields: ["name"]) 177 * ..addRuleFor(new Person(), constructorFields: ["name"])
178 * ..namedObjects['Person'] = reflect(new Person()).type; 178 * ..namedObjects['Person'] = reflect(new Person()).type;
179 */ 179 */
180 library serialization; 180 library serialization;
181 181
182 import 'src/mirrors_helpers.dart'; 182 import 'src/mirrors_helpers.dart';
183 import 'src/serialization_helpers.dart'; 183 import 'src/serialization_helpers.dart';
184 import 'dart:async'; 184 import 'dart:async';
185 import 'dart:json' as json; 185 import 'dart:json' as json;
186 import 'dart:collection' show Queue; 186 import 'dart:collection';
187 // TODO(alanknight): Ugh. Remove this if we can resolve bug 7982/7940.
188 import 'dart:collection-dev';
187 189
188 part 'src/reader_writer.dart'; 190 part 'src/reader_writer.dart';
189 part 'src/serialization_rule.dart'; 191 part 'src/serialization_rule.dart';
190 part 'src/basic_rule.dart'; 192 part 'src/basic_rule.dart';
191 part 'src/format.dart'; 193 part 'src/format.dart';
192 194
193 /** 195 /**
194 * This class defines a particular serialization scheme, in terms of 196 * This class defines a particular serialization scheme, in terms of
195 * [SerializationRule] instances, and supports reading and writing them. 197 * [SerializationRule] instances, and supports reading and writing them.
196 * See library comment for examples of usage. 198 * See library comment for examples of usage.
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 return rule; 306 return rule;
305 } 307 }
306 308
307 /** Set up the default rules, for lists and primitives. */ 309 /** Set up the default rules, for lists and primitives. */
308 void addDefaultRules() { 310 void addDefaultRules() {
309 addRule(new PrimitiveRule()); 311 addRule(new PrimitiveRule());
310 addRule(new ListRule()); 312 addRule(new ListRule());
311 // Both these rules apply to lists, so unless otherwise indicated, 313 // Both these rules apply to lists, so unless otherwise indicated,
312 // it will always find the first one. 314 // it will always find the first one.
313 addRule(new ListRuleEssential()); 315 addRule(new ListRuleEssential());
316 addRule(new MapRule());
314 } 317 }
315 318
316 /** 319 /**
317 * Add a new SerializationRule [rule]. The addRuleFor method will probably 320 * Add a new SerializationRule [rule]. The addRuleFor method will probably
318 * handle most simple cases, but for adding an arbitrary rule, including 321 * handle most simple cases, but for adding an arbitrary rule, including
319 * a SerializationRule subclass which you have created, you can use this 322 * a SerializationRule subclass which you have created, you can use this
320 * method. 323 * method.
321 */ 324 */
322 void addRule(SerializationRule rule) { 325 void addRule(SerializationRule rule) {
323 rule.number = _rules.length; 326 rule.number = _rules.length;
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
419 // or we might just be able to validate that they're correctly set up 422 // or we might just be able to validate that they're correctly set up
420 // on the other side. 423 // on the other side.
421 424
422 // Make some bogus rule instances so we have something to feed rule creation 425 // Make some bogus rule instances so we have something to feed rule creation
423 // and get their types. If only we had class literals implemented... 426 // and get their types. If only we had class literals implemented...
424 var basicRule = new BasicRule(reflect(null).type, '', [], [], []); 427 var basicRule = new BasicRule(reflect(null).type, '', [], [], []);
425 428
426 var meta = new Serialization() 429 var meta = new Serialization()
427 ..selfDescribing = false 430 ..selfDescribing = false
428 ..addRuleFor(new ListRule()) 431 ..addRuleFor(new ListRule())
432 ..addRuleFor(new MapRule())
429 ..addRuleFor(new PrimitiveRule()) 433 ..addRuleFor(new PrimitiveRule())
430 ..addRuleFor(new ListRuleEssential()) 434 ..addRuleFor(new ListRuleEssential())
431 ..addRuleFor(basicRule, 435 ..addRuleFor(basicRule,
432 constructorFields: ['type', 436 constructorFields: ['type',
433 'constructorName', 437 'constructorName',
434 'constructorFields', 'regularFields', []], 438 'constructorFields', 'regularFields', []],
435 fields: []) 439 fields: [])
436 ..addRule(new NamedObjectRule()) 440 ..addRule(new NamedObjectRule())
437 ..addRule(new MirrorRule()); 441 ..addRule(new MirrorRule());
438 meta.namedObjects = namedObjects; 442 meta.namedObjects = namedObjects;
(...skipping 17 matching lines...) Expand all
456 return ifAbsent == null ? null : ifAbsent(); 460 return ifAbsent == null ? null : ifAbsent();
457 } 461 }
458 } 462 }
459 463
460 /** 464 /**
461 * An exception class for errors during serialization. 465 * An exception class for errors during serialization.
462 */ 466 */
463 class SerializationException implements Exception { 467 class SerializationException implements Exception {
464 final String message; 468 final String message;
465 const SerializationException([this.message]); 469 const SerializationException([this.message]);
470 toString() => "SerializationException($message)";
466 } 471 }
OLDNEW
« no previous file with comments | « no previous file | pkg/serialization/lib/src/basic_rule.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698