Skip to content
This repository was archived by the owner on May 25, 2022. It is now read-only.

Commit a23edce

Browse files
committed
Merge pull request #11 from davidmorgan/master
Update for review comments.
2 parents 3aeee89 + 15062bf commit a23edce

16 files changed

+105
-100
lines changed

built_json/lib/built_json.dart

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ abstract class Serializers {
4242
/// [genericType] will be needed to deserialize.
4343
///
4444
/// Create one using [SerializersBuilder].
45+
///
46+
/// TODO(davidmorgan): document the wire format.
4547
Object serialize(Object object,
4648
{GenericType genericType: const GenericType()});
4749

@@ -84,9 +86,9 @@ class GenericType {
8486
final Type root;
8587

8688
/// Type parameters of the type.
87-
final List<GenericType> leaves;
89+
final List<GenericType> parameters;
8890

89-
const GenericType([this.root = Object, this.leaves = const []]);
91+
const GenericType([this.root = Object, this.parameters = const []]);
9092

9193
bool get isObject => root == Object;
9294
}
@@ -103,7 +105,9 @@ abstract class Serializer<T> {
103105

104106
/// The [Type]s that can be serialized.
105107
///
106-
/// They must all be equal to T or subclasses of T.
108+
/// They must all be equal to T or a subclass of T. Subclasses are used when
109+
/// T is an abstract class, which is the case with built_value generated
110+
/// serializers.
107111
Iterable<Type> get types;
108112

109113
/// The wire name of the serializable type. For most classes, the class name.
@@ -115,6 +119,8 @@ abstract class Serializer<T> {
115119
///
116120
/// Use [serializers] as needed for nested serialization. Information about
117121
/// the type being serialized is provided in [genericType].
122+
///
123+
/// TODO(davidmorgan): document the wire format.
118124
Object serialize(Serializers serializers, T object,
119125
{GenericType genericType: const GenericType()});
120126

built_json/lib/src/built_json_serializers.dart

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ class BuiltJsonSerializers implements Serializers {
1010
final BuiltMap<Type, Serializer> _typeToSerializer;
1111
final BuiltMap<String, Serializer> _wireNameToSerializer;
1212
final BuiltMap<String, Serializer> _typeNameToSerializer;
13-
1413
final BuiltMap<GenericType, Function> _builderFactories;
1514

1615
BuiltJsonSerializers._(this._typeToSerializer, this._wireNameToSerializer,
@@ -48,8 +47,9 @@ class BuiltJsonSerializers implements Serializers {
4847
final wireName = (object as List).first;
4948

5049
final serializer = _wireNameToSerializer[wireName];
51-
if (serializer ==
52-
null) throw new StateError("No serializer for '${wireName}'.");
50+
if (serializer == null) {
51+
throw new StateError("No serializer for '${wireName}'.");
52+
}
5353
final json = serializer.structured
5454
? (object as List).sublist(1)
5555
: (object as List)[1];
@@ -78,7 +78,7 @@ class BuiltJsonSerializers implements Serializers {
7878
}
7979

8080
Serializer _getSerializerByType(Type type) {
81-
return _typeToSerializer[type] ?? _typeNameToSerializer[_getName(type)];
81+
return _typeToSerializer[type] ?? _typeNameToSerializer[_getRawName(type)];
8282
}
8383
}
8484

@@ -106,7 +106,7 @@ class BuiltJsonSerializersBuilder implements SerializersBuilder {
106106
_wireNameToSerializer[serializer.wireName] = serializer;
107107
for (final type in serializer.types) {
108108
_typeToSerializer[type] = serializer;
109-
_typeNameToSerializer[_getName(type)] = serializer;
109+
_typeNameToSerializer[_getRawName(type)] = serializer;
110110
}
111111
}
112112

@@ -123,9 +123,8 @@ class BuiltJsonSerializersBuilder implements SerializersBuilder {
123123
}
124124
}
125125

126-
String _getName(Type type) => _makeRaw(type.toString());
127-
128-
String _makeRaw(String name) {
126+
String _getRawName(Type type) {
127+
final name = type.toString();
129128
final genericsStart = name.indexOf('<');
130129
return genericsStart == -1 ? name : name.substring(0, genericsStart);
131130
}

built_json/lib/src/built_list_serializer.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ class BuiltListSerializer implements Serializer<BuiltList> {
1313
@override
1414
Object serialize(Serializers serializers, BuiltList object,
1515
{GenericType genericType: const GenericType()}) {
16-
final valueGenericType = genericType.leaves.isEmpty
16+
final valueGenericType = genericType.parameters.isEmpty
1717
? const GenericType()
18-
: genericType.leaves[0];
18+
: genericType.parameters[0];
1919

2020
return object.map(
2121
(item) => serializers.serialize(item, genericType: valueGenericType));
@@ -24,9 +24,9 @@ class BuiltListSerializer implements Serializer<BuiltList> {
2424
@override
2525
BuiltList deserialize(Serializers serializers, Object object,
2626
{GenericType genericType: const GenericType()}) {
27-
final valueGenericType = genericType.leaves.isEmpty
27+
final valueGenericType = genericType.parameters.isEmpty
2828
? const GenericType()
29-
: genericType.leaves[0];
29+
: genericType.parameters[0];
3030

3131
final result = serializers.newBuilder(genericType) as ListBuilder ??
3232
new ListBuilder<Object>();

built_json/lib/src/built_map_serializer.dart

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ class BuiltMapSerializer implements Serializer<BuiltMap> {
1313
@override
1414
Object serialize(Serializers serializers, BuiltMap object,
1515
{GenericType genericType: const GenericType()}) {
16-
final keyTypes = genericType.leaves.isEmpty
16+
final keyTypes = genericType.parameters.isEmpty
1717
? const GenericType()
18-
: genericType.leaves[0];
19-
final valueTypes = genericType.leaves.isEmpty
18+
: genericType.parameters[0];
19+
final valueTypes = genericType.parameters.isEmpty
2020
? const GenericType()
21-
: genericType.leaves[1];
21+
: genericType.parameters[1];
2222

2323
final result = <Object>[];
2424
for (final key in object.keys) {
@@ -32,12 +32,12 @@ class BuiltMapSerializer implements Serializer<BuiltMap> {
3232
@override
3333
BuiltMap deserialize(Serializers serializers, Object object,
3434
{GenericType genericType: const GenericType()}) {
35-
final keyTypes = genericType.leaves.isEmpty
35+
final keyTypes = genericType.parameters.isEmpty
3636
? const GenericType()
37-
: genericType.leaves[0];
38-
final valueTypes = genericType.leaves.isEmpty
37+
: genericType.parameters[0];
38+
final valueTypes = genericType.parameters.isEmpty
3939
? const GenericType()
40-
: genericType.leaves[1];
40+
: genericType.parameters[1];
4141

4242
final result = serializers.newBuilder(genericType) as MapBuilder ??
4343
new MapBuilder<Object, Object>();

built_json/lib/src/built_set_serializer.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ class BuiltSetSerializer implements Serializer<BuiltSet> {
1313
@override
1414
Object serialize(Serializers serializers, BuiltSet object,
1515
{GenericType genericType: const GenericType()}) {
16-
final valueGenericType = genericType.leaves.isEmpty
16+
final valueGenericType = genericType.parameters.isEmpty
1717
? const GenericType()
18-
: genericType.leaves[0];
18+
: genericType.parameters[0];
1919

2020
return object.map(
2121
(item) => serializers.serialize(item, genericType: valueGenericType));
@@ -24,9 +24,9 @@ class BuiltSetSerializer implements Serializer<BuiltSet> {
2424
@override
2525
BuiltSet deserialize(Serializers serializers, Object object,
2626
{GenericType genericType: const GenericType()}) {
27-
final valueGenericType = genericType.leaves.isEmpty
27+
final valueGenericType = genericType.parameters.isEmpty
2828
? const GenericType()
29-
: genericType.leaves[0];
29+
: genericType.parameters[0];
3030

3131
final result = serializers.newBuilder(genericType) as SetBuilder ??
3232
new SetBuilder<Object>();

example/lib/compound_value.dart

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,6 @@ import 'package:example/test_enum.dart';
1111

1212
part 'compound_value.g.dart';
1313

14-
/// Example of how to use built_json.
15-
///
16-
/// Declare a top level [Serializers] field called
17-
/// serializers. The built_json code generator will provide the
18-
/// implementation. You usually only need to do this once per project.
19-
Serializers serializers = _$serializers;
20-
2114
/// Example built_value type.
2215
abstract class CompoundValue
2316
implements Built<CompoundValue, CompoundValueBuilder> {

example/lib/compound_value.g.dart

Lines changed: 1 addition & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/lib/serializers.dart

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// Copyright (c) 2015, Google Inc. Please see the AUTHORS file for details.
2+
// All rights reserved. Use of this source code is governed by a BSD-style
3+
// license that can be found in the LICENSE file.
4+
5+
library serializers;
6+
7+
import 'package:built_json/built_json.dart';
8+
import 'package:example/test_enum.dart';
9+
import 'package:example/value.dart';
10+
import 'package:example/compound_value.dart';
11+
12+
part 'serializers.g.dart';
13+
14+
/// Example of how to use built_json.
15+
///
16+
/// Declare a top level [Serializers] field called
17+
/// serializers. The built_json code generator will provide the
18+
/// implementation. You usually only need to do this once per project.
19+
Serializers serializers = _$serializers;

example/lib/serializers.g.dart

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/lib/test_enum.dart

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,6 @@ import 'package:example/value.dart';
1111

1212
part 'test_enum.g.dart';
1313

14-
/// Example of how to use built_json.
15-
///
16-
/// Declare a top level [Serializers] field called
17-
/// serializers. The built_json code generator will provide the
18-
/// implementation. You usually only need to do this once per project.
19-
Serializers serializers = _$serializers;
20-
2114
/// Example [EnumClass].
2215
class TestEnum extends EnumClass {
2316
/// Example of how to make an [EnumClass] serializable.

example/lib/test_enum.g.dart

Lines changed: 1 addition & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/lib/value.dart

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,6 @@ import 'package:example/test_enum.dart';
1212

1313
part 'value.g.dart';
1414

15-
/// Example of how to use built_json.
16-
///
17-
/// Declare a top level [Serializers] field called
18-
/// serializers. The built_json code generator will provide the
19-
/// implementation. You usually only need to do this once per project.
20-
Serializers serializers = _$serializers;
21-
2215
/// Example built_value type.
2316
abstract class Value implements Built<Value, ValueBuilder> {
2417
/// Example of how to make a built_value type serializable.

example/lib/value.g.dart

Lines changed: 1 addition & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

example/test/compound_value_test.dart

Lines changed: 29 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,47 +3,42 @@
33
// license that can be found in the LICENSE file.
44

55
import 'package:example/compound_value.dart';
6-
import 'package:example/test_enum.dart' hide serializers;
6+
import 'package:example/serializers.dart';
7+
import 'package:example/test_enum.dart';
78
import 'package:test/test.dart';
89

910
void main() {
10-
group('Value', () {
11-
test('can be serialized', () {
12-
final compoundValue = new CompoundValue((b) => b
13-
..aValue.anInt = 1
14-
..aValue.aString = 'two'
15-
..aValue.anObject = 3
16-
..aTestEnum = TestEnum.no);
11+
group('CompoundValue', () {
12+
final data = new CompoundValue((b) => b
13+
..aValue.anInt = 1
14+
..aValue.aString = 'two'
15+
..aValue.anObject = 3
16+
..aTestEnum = TestEnum.no);
17+
final serialized = [
18+
'CompoundValue',
19+
'aValue',
20+
[
21+
'anInt',
22+
1,
23+
'aString',
24+
'two',
25+
'anObject',
26+
['int', 3],
27+
'aDefaultInt',
28+
7,
29+
'listOfInt',
30+
[],
31+
],
32+
'aTestEnum',
33+
'no',
34+
];
1735

18-
expect(serializers.serialize(compoundValue), [
19-
'CompoundValue',
20-
'aValue',
21-
[
22-
'anInt',
23-
1,
24-
'aString',
25-
'two',
26-
'anObject',
27-
['int', 3],
28-
'aDefaultInt',
29-
7,
30-
'listOfInt',
31-
[],
32-
],
33-
'aTestEnum',
34-
'no',
35-
]);
36+
test('can be serialized', () {
37+
expect(serializers.serialize(data), serialized);
3638
});
3739

3840
test('can be deserialized', () {
39-
final compoundValue = new CompoundValue((b) => b
40-
..aValue.anInt = 1
41-
..aValue.aString = 'two'
42-
..aValue.anObject = 3
43-
..aTestEnum = TestEnum.no);
44-
45-
expect(serializers.deserialize(serializers.serialize(compoundValue)),
46-
compoundValue);
41+
expect(serializers.deserialize(serialized), data);
4742
});
4843
});
4944
}

0 commit comments

Comments
 (0)