parseEventLine static method
Implementation
static TraceEventRecord? parseEventLine(String line) {
final trimmed = line.trim();
if (trimmed.isEmpty) return null;
final markerIndex = trimmed.indexOf(_eventMarker);
if (markerIndex == -1) return null;
final prefix = trimmed.substring(0, markerIndex).trimRight();
final json = trimmed.substring(markerIndex + _eventMarker.length);
try {
final decoded = jsonDecode(json);
if (decoded is! Map) return null;
final data = Map<String, Object?>.from(decoded);
final version = data['v'];
if (version is! int || version != _eventSchemaVersion) return null;
final ts = data['ts'] ?? _parseTimestampUs(prefix);
if (ts is! int) return null;
final tagName = data['tag'] ?? _parseTagName(prefix);
if (tagName is! String) return null;
final tag = _traceTagByName[tagName];
if (tag == null) return null;
final type = data['type'];
if (type is! String) return null;
final explicitFields = data['fields'];
final fields = explicitFields is Map
? Map<String, Object?>.from(explicitFields)
: <String, Object?>{
for (final entry in data.entries)
if (entry.key != 'v' &&
entry.key != 'ts' &&
entry.key != 'tag' &&
entry.key != 'type')
entry.key: entry.value,
};
return TraceEventRecord(
timestampUs: ts,
tag: tag,
type: type,
fields: fields,
);
} catch (_) {
return null;
}
}