| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 part of dart.convert; | 5 part of dart.convert; |
| 6 | 6 |
| 7 /** | 7 /** |
| 8 * Error thrown by JSON serialization if an object cannot be serialized. | 8 * Error thrown by JSON serialization if an object cannot be serialized. |
| 9 * | 9 * |
| 10 * The [unsupportedObject] field holds that object that failed to be serialized. | 10 * The [unsupportedObject] field holds that object that failed to be serialized. |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 149 | 149 |
| 150 JsonDecoder get decoder { | 150 JsonDecoder get decoder { |
| 151 if (_reviver == null) return const JsonDecoder(); | 151 if (_reviver == null) return const JsonDecoder(); |
| 152 return new JsonDecoder(_reviver); | 152 return new JsonDecoder(_reviver); |
| 153 } | 153 } |
| 154 } | 154 } |
| 155 | 155 |
| 156 /** | 156 /** |
| 157 * This class converts JSON objects to strings. | 157 * This class converts JSON objects to strings. |
| 158 */ | 158 */ |
| 159 class JsonEncoder extends Converter<Object, String> { | 159 class JsonEncoder extends Converter<Object, String> |
| 160 implements ChunkedConverter<Object, String, Object, String> { |
| 160 /** | 161 /** |
| 161 * The string used for indention. | 162 * The string used for indention. |
| 162 * | 163 * |
| 163 * When generating multi-line output, this string is inserted once at the | 164 * When generating multi-line output, this string is inserted once at the |
| 164 * beginning of each indented line for each level of indentation. | 165 * beginning of each indented line for each level of indentation. |
| 165 * | 166 * |
| 166 * If `null`, the output is encoded as a single line. | 167 * If `null`, the output is encoded as a single line. |
| 167 */ | 168 */ |
| 168 final String indent; | 169 final String indent; |
| 169 | 170 |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 275 } | 276 } |
| 276 } | 277 } |
| 277 | 278 |
| 278 /** | 279 /** |
| 279 * Encoder that encodes a single object as a UTF-8 encoded JSON string. | 280 * Encoder that encodes a single object as a UTF-8 encoded JSON string. |
| 280 * | 281 * |
| 281 * This encoder works equivalently to first converting the object to | 282 * This encoder works equivalently to first converting the object to |
| 282 * a JSON string, and then UTF-8 encoding the string, but without | 283 * a JSON string, and then UTF-8 encoding the string, but without |
| 283 * creating an intermediate string. | 284 * creating an intermediate string. |
| 284 */ | 285 */ |
| 285 class JsonUtf8Encoder extends Converter<Object, List<int>> { | 286 class JsonUtf8Encoder extends Converter<Object, List<int>> |
| 287 implements ChunkedConverter<Object, List<int>, Object, List<int>> { |
| 286 /** Default buffer size used by the JSON-to-UTF-8 encoder. */ | 288 /** Default buffer size used by the JSON-to-UTF-8 encoder. */ |
| 287 static const int DEFAULT_BUFFER_SIZE = 256; | 289 static const int DEFAULT_BUFFER_SIZE = 256; |
| 288 /** Indentation used in pretty-print mode, `null` if not pretty. */ | 290 /** Indentation used in pretty-print mode, `null` if not pretty. */ |
| 289 final List<int> _indent; | 291 final List<int> _indent; |
| 290 /** Function called with each un-encodable object encountered. */ | 292 /** Function called with each un-encodable object encountered. */ |
| 291 final _ToEncodable _toEncodable; | 293 final _ToEncodable _toEncodable; |
| 292 /** UTF-8 buffer size. */ | 294 /** UTF-8 buffer size. */ |
| 293 final int _bufferSize; | 295 final int _bufferSize; |
| 294 | 296 |
| 295 /** | 297 /** |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 459 if (!_isDone) { | 461 if (!_isDone) { |
| 460 _isDone = true; | 462 _isDone = true; |
| 461 _sink.close(); | 463 _sink.close(); |
| 462 } | 464 } |
| 463 } | 465 } |
| 464 } | 466 } |
| 465 | 467 |
| 466 /** | 468 /** |
| 467 * This class parses JSON strings and builds the corresponding objects. | 469 * This class parses JSON strings and builds the corresponding objects. |
| 468 */ | 470 */ |
| 469 class JsonDecoder extends Converter<String, Object> { | 471 class JsonDecoder extends Converter<String, Object> |
| 472 implements ChunkedConverter<String, Object, String, Object> { |
| 470 final _Reviver _reviver; | 473 final _Reviver _reviver; |
| 471 /** | 474 /** |
| 472 * Constructs a new JsonDecoder. | 475 * Constructs a new JsonDecoder. |
| 473 * | 476 * |
| 474 * The [reviver] may be `null`. | 477 * The [reviver] may be `null`. |
| 475 */ | 478 */ |
| 476 const JsonDecoder([reviver(var key, var value)]) : this._reviver = reviver; | 479 const JsonDecoder([reviver(var key, var value)]) : this._reviver = reviver; |
| 477 | 480 |
| 478 /** | 481 /** |
| 479 * Converts the given JSON-string [input] to its corresponding object. | 482 * Converts the given JSON-string [input] to its corresponding object. |
| (...skipping 569 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1049 buffer.setRange(index, end, indent); | 1052 buffer.setRange(index, end, indent); |
| 1050 index = end; | 1053 index = end; |
| 1051 } else { | 1054 } else { |
| 1052 for (int i = 0; i < indentLength; i++) { | 1055 for (int i = 0; i < indentLength; i++) { |
| 1053 writeByte(indent[i]); | 1056 writeByte(indent[i]); |
| 1054 } | 1057 } |
| 1055 } | 1058 } |
| 1056 } | 1059 } |
| 1057 } | 1060 } |
| 1058 } | 1061 } |
| OLD | NEW |