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

Commit 0b160bd

Browse files
committed
Merge pull request #24 from davidmorgan/fix-null-serialization
Fix serialization of null @nullable fields: omit them entirely.
2 parents c314cf1 + 781f2ef commit 0b160bd

17 files changed

+222
-118
lines changed

CHANGELOG.md

+4
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## 0.0.6
4+
5+
- Fix serialization of null @nullable fields: omit them entirely.
6+
37
## 0.0.5
48

59
- Add PrimitiveSerializer and StructuredSerializer interfaces.

built_json/pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: built_json
2-
version: 0.0.5
2+
version: 0.0.6
33
description: >
44
JSON serialization for Built Collections, Built Values and Enum Classes.
55
This library is the runtime dependency.

built_json_generator/lib/src/source_class.dart

+17-2
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,9 @@ class _\$${name}Serializer implements StructuredSerializer<$name> {
8484
@override
8585
Iterable serialize(Serializers serializers, $name object,
8686
{FullType specifiedType: FullType.unspecified}) {
87-
return [${_generateFieldSerializers()}];
87+
final result = [${_generateRequiredFieldSerializers()}];
88+
${_generateNullableFieldSerializers()}
89+
return result;
8890
}
8991
9092
@override
@@ -137,14 +139,27 @@ class _\$${name}Serializer implements PrimitiveSerializer<$name> {
137139
}
138140
}
139141

140-
String _generateFieldSerializers() {
142+
String _generateRequiredFieldSerializers() {
141143
return fields
144+
.where((field) => !field.isNullable)
142145
.map((field) => "'${field.name}', "
143146
"serializers.serialize(object.${field.name}, "
144147
"specifiedType: ${field.generateFullType()}),")
145148
.join('');
146149
}
147150

151+
String _generateNullableFieldSerializers() {
152+
return fields
153+
.where((field) => field.isNullable)
154+
.map((field) => '''
155+
if (object.${field.name} != null) {
156+
result.add('${field.name}');
157+
result.add(serializers.serialize(
158+
object.${field.name}, specifiedType: ${field.generateFullType()}));
159+
}
160+
''').join('');
161+
}
162+
148163
String _generateFieldDeserializers() {
149164
return fields.map((field) {
150165
if (field.builderFieldUsesNestedBuilder) {

built_json_generator/lib/src/source_class.g.dart

+12-30
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

built_json_generator/lib/src/source_field.dart

+5
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ abstract class SourceField implements Built<SourceField, SourceFieldBuilder> {
1919
});
2020

2121
bool get isSerializable;
22+
bool get isNullable;
2223
String get name;
2324
String get type;
2425
bool get builderFieldUsesNestedBuilder;
@@ -38,6 +39,9 @@ abstract class SourceField implements Built<SourceField, SourceFieldBuilder> {
3839
result.isSerializable = isSerializable;
3940

4041
if (isSerializable) {
42+
result.isNullable =
43+
fieldElement.getter.metadata.any((metadata) => metadata.constantValue
44+
.toStringValue() == 'nullable');
4145
result.name = fieldElement.displayName;
4246
result.type = fieldElement.getter.returnType.displayName;
4347
result.builderFieldUsesNestedBuilder = builderFieldElement != null &&
@@ -97,6 +101,7 @@ abstract class SourceField implements Built<SourceField, SourceFieldBuilder> {
97101
abstract class SourceFieldBuilder
98102
implements Builder<SourceField, SourceFieldBuilder> {
99103
bool isSerializable;
104+
bool isNullable = false;
100105
String name = '';
101106
String type = '';
102107
bool builderFieldUsesNestedBuilder = false;

built_json_generator/lib/src/source_field.g.dart

+30-35
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

built_json_generator/lib/src/source_library.g.dart

+13-28
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

built_json_generator/pubspec.yaml

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name: built_json_generator
2-
version: 0.0.5
2+
version: 0.0.6
33
description: >
44
JSON serialization for Built Collections, Built Values and Enum Classes.
55
This library is the dev dependency.
@@ -13,7 +13,7 @@ environment:
1313
dependencies:
1414
analyzer: '>=0.27.1 <0.28.0'
1515
built_collection: '^1.0.1'
16-
built_json: '^0.0.5'
16+
built_json: '^0.0.6'
1717
source_gen: '>=0.4.3 <0.5.0'
1818
quiver: '>=0.21.0 <0.22.0'
1919

0 commit comments

Comments
 (0)