read method

  1. @override
T read(
  1. BinaryReader reader
)
override

Is called when a value has to be decoded.

Implementation

@override
T read(reader) {
  // read key first
  final key = reader.read().toString();

  // read attributes (no relationships stored)
  final total = reader.readByte();
  final map = <String, dynamic>{
    for (var i = 0; i < total; i++) reader.read().toString(): reader.read(),
  };

  // reconstruct relationship information from graph
  for (final entry in relationshipsFor().entries) {
    // entry keys are the name of relationships => metadata
    final name = entry.key;
    final relKeys = graph._getEdge(key, metadata: name);
    map[name] =
        entry.value['kind'] == 'BelongsTo' ? relKeys.safeFirst : relKeys;
  }

  return deserialize(map);
}