encodeMeta method

String encodeMeta({
  1. required String sessionId,
  2. required DateTime started,
  3. Map<String, Object?>? meta,
})

Encodes the session metadata line (no trailing newline).

The package-provided sessionId and started keys always win over the same keys in meta. Never throws: user meta values are converted to JSON-safe representations via Loggable.objectToJson; if that is impossible, the line degrades to the package-provided keys only.

Implementation

String encodeMeta({
  required String sessionId,
  required DateTime started,
  Map<String, Object?>? meta,
}) {
  final auto = <String, Object?>{
    'sessionId': sessionId,
    'started': started.toUtc().toIso8601String(),
  };

  var userMeta = const <String, Object?>{};
  if (meta != null) {
    try {
      final converted = Loggable.objectToJson(meta);
      if (converted is Map<String, Object?>) {
        userMeta = converted;
      }
    } on Object {
      // Невалидные метаданные не должны блокировать запись логов.
    }
  }

  try {
    return jsonEncode(<String, Object?>{
      metaKey: {...userMeta, ...auto},
    });
  } on Object {
    return jsonEncode(<String, Object?>{metaKey: auto});
  }
}