serializeStruct function

void serializeStruct(
  1. Type self,
  2. SerialBuffer buffer,
  3. Object data, {
  4. SerializerState? state,
  5. 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;
  // }
}