serializableAttributes method

Map<String, Object?> serializableAttributes({
  1. bool includeHidden = false,
  2. ValueCodecRegistry? registry,
})
inherited

Serializes the attribute map, applying casts and filtering hidden fields.

Implementation

Map<String, Object?> serializableAttributes({
  bool includeHidden = false,
  ValueCodecRegistry? registry,
}) {
  final inspector = _attributeInspector();
  final codecs = registry ?? ValueCodecRegistry.instance;
  final result = <String, Object?>{};
  final definition = _definition;
  final accessors = definition?.accessors ?? const <String, AttributeAccessor>{};
  final attrs = _ensureAttributes();
  for (final entry in attrs.entries) {
    if (!_shouldSerializeColumn(entry.key, includeHidden, inspector)) {
      continue;
    }
    final accessor = accessors[entry.key];
    final value = accessor == null
        ? entry.value
        : accessor(this as OrmEntity, entry.value);
    result[entry.key] =
        accessor == null
            ? _encodeAttribute(
              column: entry.key,
              value: value,
              registry: codecs,
              definition: definition,
              inspector: inspector,
            )
            : codecs.encodeValue(value);
  }

  final appends = _metadata.appends;
  if (appends.isNotEmpty) {
    for (final attribute in appends) {
      if (result.containsKey(attribute)) {
        continue;
      }
      if (!_shouldSerializeColumn(attribute, includeHidden, inspector)) {
        continue;
      }
      final accessor = accessors[attribute];
      if (accessor != null) {
        result[attribute] = codecs.encodeValue(
          accessor(this as OrmEntity, attrs[attribute]),
        );
        continue;
      }
      if (!attrs.containsKey(attribute)) {
        continue;
      }
      result[attribute] = _encodeAttribute(
        column: attribute,
        value: attrs[attribute],
        registry: codecs,
        definition: definition,
        inspector: inspector,
      );
    }
  }
  return result;
}