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 |