| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 protobuf; | 5 part of protobuf; |
| 6 | 6 |
| 7 // Range of integers in JSON (53-bit integers). | |
| 8 Int64 _MAX_JSON_INT = new Int64.fromInts(0x200000, 0); | |
| 9 Int64 _MIN_JSON_INT = -_MAX_JSON_INT; | |
| 10 | |
| 11 Map<String, dynamic> _writeToJsonMap(_FieldSet fs) { | 7 Map<String, dynamic> _writeToJsonMap(_FieldSet fs) { |
| 12 convertToMap(fieldValue, fieldType) { | 8 convertToMap(fieldValue, fieldType) { |
| 13 int baseType = PbFieldType._baseType(fieldType); | 9 int baseType = PbFieldType._baseType(fieldType); |
| 14 | 10 |
| 15 if (_isRepeated(fieldType)) { | 11 if (_isRepeated(fieldType)) { |
| 16 return new List.from(fieldValue.map((e) => convertToMap(e, baseType))); | 12 return new List.from(fieldValue.map((e) => convertToMap(e, baseType))); |
| 17 } | 13 } |
| 18 | 14 |
| 19 switch (baseType) { | 15 switch (baseType) { |
| 20 case PbFieldType._BOOL_BIT: | 16 case PbFieldType._BOOL_BIT: |
| 21 case PbFieldType._STRING_BIT: | 17 case PbFieldType._STRING_BIT: |
| 22 case PbFieldType._FLOAT_BIT: | 18 case PbFieldType._FLOAT_BIT: |
| 23 case PbFieldType._DOUBLE_BIT: | 19 case PbFieldType._DOUBLE_BIT: |
| 24 case PbFieldType._INT32_BIT: | 20 case PbFieldType._INT32_BIT: |
| 25 case PbFieldType._SINT32_BIT: | 21 case PbFieldType._SINT32_BIT: |
| 26 case PbFieldType._UINT32_BIT: | 22 case PbFieldType._UINT32_BIT: |
| 27 case PbFieldType._FIXED32_BIT: | 23 case PbFieldType._FIXED32_BIT: |
| 28 case PbFieldType._SFIXED32_BIT: | 24 case PbFieldType._SFIXED32_BIT: |
| 29 return fieldValue; | 25 return fieldValue; |
| 30 case PbFieldType._BYTES_BIT: | 26 case PbFieldType._BYTES_BIT: |
| 31 // Encode 'bytes' as a base64-encoded string. | 27 // Encode 'bytes' as a base64-encoded string. |
| 32 return BASE64.encode(fieldValue as List<int>); | 28 return BASE64.encode(fieldValue as List<int>); |
| 33 case PbFieldType._ENUM_BIT: | 29 case PbFieldType._ENUM_BIT: |
| 34 return fieldValue.value; // assume |value| < 2^52 | 30 return fieldValue.value; // assume |value| < 2^52 |
| 35 case PbFieldType._INT64_BIT: | 31 case PbFieldType._INT64_BIT: |
| 36 case PbFieldType._SINT64_BIT: | 32 case PbFieldType._SINT64_BIT: |
| 37 case PbFieldType._UINT64_BIT: | 33 case PbFieldType._UINT64_BIT: |
| 38 case PbFieldType._FIXED64_BIT: | 34 case PbFieldType._FIXED64_BIT: |
| 39 case PbFieldType._SFIXED64_BIT: | 35 case PbFieldType._SFIXED64_BIT: |
| 40 // Use strings for 64-bit integers which cannot fit in doubles. | |
| 41 if (_MIN_JSON_INT <= fieldValue && fieldValue <= _MAX_JSON_INT) { | |
| 42 return fieldValue.toInt(); | |
| 43 } | |
| 44 return fieldValue.toString(); | 36 return fieldValue.toString(); |
| 45 case PbFieldType._GROUP_BIT: | 37 case PbFieldType._GROUP_BIT: |
| 46 case PbFieldType._MESSAGE_BIT: | 38 case PbFieldType._MESSAGE_BIT: |
| 47 return fieldValue.writeToJsonMap(); | 39 return fieldValue.writeToJsonMap(); |
| 48 default: | 40 default: |
| 49 throw 'Unknown type $fieldType'; | 41 throw 'Unknown type $fieldType'; |
| 50 } | 42 } |
| 51 } | 43 } |
| 52 | 44 |
| 53 var result = <String, dynamic>{}; | 45 var result = <String, dynamic>{}; |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 188 subMessage._fieldSet, value as Map<String, dynamic>, registry); | 180 subMessage._fieldSet, value as Map<String, dynamic>, registry); |
| 189 return subMessage; | 181 return subMessage; |
| 190 } | 182 } |
| 191 expectedType = 'nested message or group'; | 183 expectedType = 'nested message or group'; |
| 192 break; | 184 break; |
| 193 default: | 185 default: |
| 194 throw new ArgumentError('Unknown type $fieldType'); | 186 throw new ArgumentError('Unknown type $fieldType'); |
| 195 } | 187 } |
| 196 throw new ArgumentError('Expected type $expectedType, got $value'); | 188 throw new ArgumentError('Expected type $expectedType, got $value'); |
| 197 } | 189 } |
| OLD | NEW |