jsonlEncodeAsync function
Future<void>
jsonlEncodeAsync({
- required Object items,
- StringSink? sink,
- StringSink sinkProvider()?,
Implementation
Future<void> jsonlEncodeAsync({
required Object items,
StringSink? sink,
StringSink Function()? sinkProvider,
}) async {
if ((sink == null) == (sinkProvider == null)) {
throw ArgumentError(
'Exactly one of sink or sinkProvider must be provided.');
}
bool ownsSink = false;
late StringSink activeSink = sink ??
() {
ownsSink = true;
return sinkProvider!();
}();
try {
switch (items) {
case Stream stream:
await for (final item in stream) {
await jsonEncodeAsync(object: item, sink: activeSink);
activeSink.writeln();
}
case Iterable iterable:
for (final item in iterable) {
await jsonEncodeAsync(object: item, sink: activeSink);
activeSink.writeln();
}
default:
throw ArgumentError(
'The "items" parameter must be an Iterable or a Stream.',
);
}
} finally {
if (ownsSink) {
if (activeSink is StreamSink) {
await (activeSink as StreamSink).close();
} else if (activeSink is Sink) {
(activeSink as Sink).close();
}
}
}
}