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;
}