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

Commit 15062bf

Browse files
committed
Update for review comments.
1 parent 78420e4 commit 15062bf

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.

0 commit comments

Comments
 (0)