+3
This commit is contained in:
parent
7768b906b7
commit
82268579e4
6 changed files with 35 additions and 5 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
# 2.0.8+3
|
||||||
|
* Don't fail on `null` in `toMap`.
|
||||||
|
* Support self-referencing via `toJson()`.
|
||||||
|
|
||||||
# 2.0.8+2
|
# 2.0.8+2
|
||||||
* Better discern when custom methods disqualify classes
|
* Better discern when custom methods disqualify classes
|
||||||
from `const` protection.
|
from `const` protection.
|
||||||
|
|
|
@ -89,6 +89,14 @@ class SerializerGenerator extends GeneratorForAnnotation<Serializable> {
|
||||||
|
|
||||||
String serializedRepresentation = 'model.${field.name}';
|
String serializedRepresentation = 'model.${field.name}';
|
||||||
|
|
||||||
|
String serializerToMap(ReCase rc, String value) {
|
||||||
|
if (rc.pascalCase == ctx.modelClassName) {
|
||||||
|
return '($value)?.toJson()';
|
||||||
|
}
|
||||||
|
|
||||||
|
return '${rc.pascalCase}Serializer.toMap($value)';
|
||||||
|
}
|
||||||
|
|
||||||
// Serialize dates
|
// Serialize dates
|
||||||
if (dateTimeTypeChecker.isAssignableFromType(field.type))
|
if (dateTimeTypeChecker.isAssignableFromType(field.type))
|
||||||
serializedRepresentation = 'model.${field.name}?.toIso8601String()';
|
serializedRepresentation = 'model.${field.name}?.toIso8601String()';
|
||||||
|
@ -97,7 +105,7 @@ class SerializerGenerator extends GeneratorForAnnotation<Serializable> {
|
||||||
else if (isModelClass(field.type)) {
|
else if (isModelClass(field.type)) {
|
||||||
var rc = new ReCase(field.type.name);
|
var rc = new ReCase(field.type.name);
|
||||||
serializedRepresentation =
|
serializedRepresentation =
|
||||||
'${rc.pascalCase}Serializer.toMap(model.${field.name})';
|
'${serializerToMap(rc, 'model.${field.name}')}';
|
||||||
} else if (field.type is InterfaceType) {
|
} else if (field.type is InterfaceType) {
|
||||||
var t = field.type as InterfaceType;
|
var t = field.type as InterfaceType;
|
||||||
|
|
||||||
|
@ -109,8 +117,8 @@ class SerializerGenerator extends GeneratorForAnnotation<Serializable> {
|
||||||
var rc = new ReCase(t.typeArguments[1].name);
|
var rc = new ReCase(t.typeArguments[1].name);
|
||||||
serializedRepresentation =
|
serializedRepresentation =
|
||||||
'''model.${field.name}.keys?.fold({}, (map, key) {
|
'''model.${field.name}.keys?.fold({}, (map, key) {
|
||||||
return map..[key] = ${rc.pascalCase}Serializer.toMap(model.${field
|
return map..[key] = ${serializerToMap(
|
||||||
.name}[key]);
|
rc, 'model.${field.name}[key]')};
|
||||||
})''';
|
})''';
|
||||||
} else if (t.element.isEnum) {
|
} else if (t.element.isEnum) {
|
||||||
serializedRepresentation = '''
|
serializedRepresentation = '''
|
||||||
|
@ -125,7 +133,10 @@ class SerializerGenerator extends GeneratorForAnnotation<Serializable> {
|
||||||
}
|
}
|
||||||
|
|
||||||
buf.write('};');
|
buf.write('};');
|
||||||
method.body = new Code(buf.toString());
|
method.body = new Block.of([
|
||||||
|
new Code('if (model == null) { return null; }'),
|
||||||
|
new Code(buf.toString()),
|
||||||
|
]);
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
name: angel_serialize_generator
|
name: angel_serialize_generator
|
||||||
version: 2.0.8+2
|
version: 2.0.8+3
|
||||||
description: Model serialization generators, designed for use with Angel. Combine with angel_serialize for flexible modeling.
|
description: Model serialization generators, designed for use with Angel. Combine with angel_serialize for flexible modeling.
|
||||||
author: Tobe O <thosakwe@gmail.com>
|
author: Tobe O <thosakwe@gmail.com>
|
||||||
homepage: https://github.com/angel-dart/serialize
|
homepage: https://github.com/angel-dart/serialize
|
||||||
|
|
|
@ -42,6 +42,9 @@ abstract class AuthorSerializer {
|
||||||
}
|
}
|
||||||
|
|
||||||
static Map<String, dynamic> toMap(Author model) {
|
static Map<String, dynamic> toMap(Author model) {
|
||||||
|
if (model == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
if (model.name == null) {
|
if (model.name == null) {
|
||||||
throw new FormatException("Missing required field 'name' on Author.");
|
throw new FormatException("Missing required field 'name' on Author.");
|
||||||
}
|
}
|
||||||
|
@ -107,6 +110,9 @@ abstract class LibrarySerializer {
|
||||||
}
|
}
|
||||||
|
|
||||||
static Map<String, dynamic> toMap(Library model) {
|
static Map<String, dynamic> toMap(Library model) {
|
||||||
|
if (model == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
'id': model.id,
|
'id': model.id,
|
||||||
'collection': model.collection.keys?.fold({}, (map, key) {
|
'collection': model.collection.keys?.fold({}, (map, key) {
|
||||||
|
@ -152,6 +158,9 @@ abstract class BookmarkSerializer {
|
||||||
}
|
}
|
||||||
|
|
||||||
static Map<String, dynamic> toMap(Bookmark model) {
|
static Map<String, dynamic> toMap(Bookmark model) {
|
||||||
|
if (model == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
if (model.page == null) {
|
if (model.page == null) {
|
||||||
throw new FormatException("Missing required field 'page' on Bookmark.");
|
throw new FormatException("Missing required field 'page' on Bookmark.");
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,9 @@ abstract class BookSerializer {
|
||||||
}
|
}
|
||||||
|
|
||||||
static Map<String, dynamic> toMap(Book model) {
|
static Map<String, dynamic> toMap(Book model) {
|
||||||
|
if (model == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
'id': model.id,
|
'id': model.id,
|
||||||
'author': model.author,
|
'author': model.author,
|
||||||
|
|
|
@ -16,6 +16,9 @@ abstract class WithEnumSerializer {
|
||||||
}
|
}
|
||||||
|
|
||||||
static Map<String, dynamic> toMap(WithEnum model) {
|
static Map<String, dynamic> toMap(WithEnum model) {
|
||||||
|
if (model == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
return {
|
return {
|
||||||
'type':
|
'type':
|
||||||
model.type == null ? null : WithEnumType.values.indexOf(model.type),
|
model.type == null ? null : WithEnumType.values.indexOf(model.type),
|
||||||
|
|
Loading…
Reference in a new issue