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

Commit

Permalink
Merge pull request #24 from davidmorgan/fix-null-serialization
Browse files Browse the repository at this point in the history
Fix serialization of null @nullable fields: omit them entirely.
  • Loading branch information
davidmorgan committed May 5, 2016
2 parents c314cf1 + 781f2ef commit 0b160bd
Show file tree
Hide file tree
Showing 17 changed files with 222 additions and 118 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changelog

## 0.0.6

- Fix serialization of null @nullable fields: omit them entirely.

## 0.0.5

- Add PrimitiveSerializer and StructuredSerializer interfaces.
Expand Down
2 changes: 1 addition & 1 deletion built_json/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: built_json
version: 0.0.5
version: 0.0.6
description: >
JSON serialization for Built Collections, Built Values and Enum Classes.
This library is the runtime dependency.
Expand Down
19 changes: 17 additions & 2 deletions built_json_generator/lib/src/source_class.dart
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,9 @@ class _\$${name}Serializer implements StructuredSerializer<$name> {
@override
Iterable serialize(Serializers serializers, $name object,
{FullType specifiedType: FullType.unspecified}) {
return [${_generateFieldSerializers()}];
final result = [${_generateRequiredFieldSerializers()}];
${_generateNullableFieldSerializers()}
return result;
}
@override
Expand Down Expand Up @@ -137,14 +139,27 @@ class _\$${name}Serializer implements PrimitiveSerializer<$name> {
}
}

String _generateFieldSerializers() {
String _generateRequiredFieldSerializers() {
return fields
.where((field) => !field.isNullable)
.map((field) => "'${field.name}', "
"serializers.serialize(object.${field.name}, "
"specifiedType: ${field.generateFullType()}),")
.join('');
}

String _generateNullableFieldSerializers() {
return fields
.where((field) => field.isNullable)
.map((field) => '''
if (object.${field.name} != null) {
result.add('${field.name}');
result.add(serializers.serialize(
object.${field.name}, specifiedType: ${field.generateFullType()}));
}
''').join('');
}

String _generateFieldDeserializers() {
return fields.map((field) {
if (field.builderFieldUsesNestedBuilder) {
Expand Down
42 changes: 12 additions & 30 deletions built_json_generator/lib/src/source_class.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions built_json_generator/lib/src/source_field.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ abstract class SourceField implements Built<SourceField, SourceFieldBuilder> {
});

bool get isSerializable;
bool get isNullable;
String get name;
String get type;
bool get builderFieldUsesNestedBuilder;
Expand All @@ -38,6 +39,9 @@ abstract class SourceField implements Built<SourceField, SourceFieldBuilder> {
result.isSerializable = isSerializable;

if (isSerializable) {
result.isNullable =
fieldElement.getter.metadata.any((metadata) => metadata.constantValue
.toStringValue() == 'nullable');
result.name = fieldElement.displayName;
result.type = fieldElement.getter.returnType.displayName;
result.builderFieldUsesNestedBuilder = builderFieldElement != null &&
Expand Down Expand Up @@ -97,6 +101,7 @@ abstract class SourceField implements Built<SourceField, SourceFieldBuilder> {
abstract class SourceFieldBuilder
implements Builder<SourceField, SourceFieldBuilder> {
bool isSerializable;
bool isNullable = false;
String name = '';
String type = '';
bool builderFieldUsesNestedBuilder = false;
Expand Down
65 changes: 30 additions & 35 deletions built_json_generator/lib/src/source_field.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

41 changes: 13 additions & 28 deletions built_json_generator/lib/src/source_library.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions built_json_generator/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: built_json_generator
version: 0.0.5
version: 0.0.6
description: >
JSON serialization for Built Collections, Built Values and Enum Classes.
This library is the dev dependency.
Expand All @@ -13,7 +13,7 @@ environment:
dependencies:
analyzer: '>=0.27.1 <0.28.0'
built_collection: '^1.0.1'
built_json: '^0.0.5'
built_json: '^0.0.6'
source_gen: '>=0.4.3 <0.5.0'
quiver: '>=0.21.0 <0.22.0'

Expand Down
Loading

0 comments on commit 0b160bd

Please sign in to comment.