parseEventLine static method

TraceEventRecord? parseEventLine(
  1. String line
)

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;
  }
}