encode<T> static method

Stream<List<int>> encode<T>(
  1. T value, {
  2. Encodable<T>? using,
})
override

Implementation

static Stream<List<int>> encode<T>(T value, {Encodable<T>? using}) {
  final group = StreamGroup<List<int>>();
  final values = _AsyncEncodingValues(group);

  final encoder = ProgressiveJsonEncoder._(values);

  if (value is Future || value is Stream || value is Reference) {
    encoder.encodeObject<T>(value, using: using);
  } else {
    encoder.encodeObject<Reference<T>>(Reference(value, using: using));
  }

  var bytes = encoder.toBytes();

  if (bytes case [tokenDollarSign, 0x30 /* '0' */]) {
    // Skip if the data is just a marker with no value
  } else {
    group.add(Stream.value(bytes + [0x0A])); // Add newline at the end
  }

  if (group.isIdle) {
    group.close();
  } else {
    group.onIdle.listen((_) {
      group.close();
    });
  }

  return group.stream;
}