serializeStruct function
void
serializeStruct(
- Type self,
- SerialBuffer buffer,
- Object data, {
- SerializerState? state,
- bool allowExtensions = true,
Implementation
void serializeStruct(Type self, SerialBuffer buffer, Object data, {SerializerState? state, bool allowExtensions = true}) {
state ??= SerializerState();
// try {
if (self.base != null) {
self.base!.serialize?.call(self.base, buffer, data,
state: state, allowExtensions: allowExtensions);
}
Map dy = data as dynamic;
for (final field in self.fields!) {
if (dy.containsKey(field.name)) {
if (state.skippedBinaryExtension) {
throw 'unexpected ' + self.name! + '.' + field.name!;
}
field.type!.serialize!.call(field.type, buffer, dy[field.name],
state: state,
allowExtensions:
allowExtensions && field == self.fields![self.fields!.length - 1]);
} else {
if (allowExtensions && field.type!.extensionOf != null) {
state.skippedBinaryExtension = true;
} else if (field.type!.extensionOf != null) {
field.type!.serialize!(field.type, buffer, dy[field.name], state: state);
} else {
throw 'missing ' + self.name! + '.' + field.name! + ' (type=' + field.type!.name! + ')';
}
}
}
// } catch (e) {
// throw e;
// }
}