entityToGraphRow<T extends Object> function

Map<String, Object?> entityToGraphRow<T extends Object>(
  1. T row,
  2. EntityEncoder<T>? encoder
)

Encode a transport row without requiring Freezed or JSON code generation.

Implementation

Map<String, Object?> entityToGraphRow<T extends Object>(
  T row,
  EntityEncoder<T>? encoder,
) {
  if (encoder != null) return Map.unmodifiable(encoder(row));
  if (row is Map<String, Object?>) return Map.unmodifiable(row);
  try {
    // Dynamic access is intentionally isolated at this adapter boundary.
    // ignore: avoid_dynamic_calls
    final encoded = (row as dynamic).toJson() as Map<String, dynamic>;
    return Map.unmodifiable(encoded.cast<String, Object?>());
  } on Object catch (error) {
    throw TerminalError(
      'No EntityEncoder was supplied for ${row.runtimeType}: $error',
    );
  }
}