toJson method

Map<String, dynamic> toJson()

Produces a Map that can be serialized to JSON.

Implementation

Map<String, dynamic> toJson() {
  final json = <String, dynamic>{};

  forEach((key, value) {
    if (value == null) return;
    switch (key) {
      case SentryDevice.type:
        final deviceMap = device?.toJson();
        if (deviceMap?.isNotEmpty ?? false) {
          json[SentryDevice.type] = deviceMap;
        }
        break;
      case SentryOperatingSystem.type:
        final osMap = operatingSystem?.toJson();
        if (osMap?.isNotEmpty ?? false) {
          json[SentryOperatingSystem.type] = osMap;
        }
        break;

      case SentryApp.type:
        final appMap = app?.toJson();
        if (appMap?.isNotEmpty ?? false) {
          json[SentryApp.type] = appMap;
        }
        break;

      case SentryBrowser.type:
        final browserMap = browser?.toJson();
        if (browserMap?.isNotEmpty ?? false) {
          json[SentryBrowser.type] = browserMap;
        }
        break;

      case SentryCulture.type:
        final cultureMap = culture?.toJson();
        if (cultureMap?.isNotEmpty ?? false) {
          json[SentryCulture.type] = cultureMap;
        }
        break;

      case SentryGpu.type:
        final gpuMap = gpu?.toJson();
        if (gpuMap?.isNotEmpty ?? false) {
          json[SentryGpu.type] = gpuMap;
        }
        break;

      case SentryResponse.type:
        final responseMap = response?.toJson();
        if (responseMap?.isNotEmpty ?? false) {
          json[SentryResponse.type] = responseMap;
        }
        break;

      case SentryTraceContext.type:
        final traceMap = trace?.toJson();
        if (traceMap?.isNotEmpty ?? false) {
          json[SentryTraceContext.type] = traceMap;
        }
        break;

      case SentryFeedback.type:
        final feedbackMap = feedback?.toJson();
        if (feedbackMap?.isNotEmpty ?? false) {
          json[SentryFeedback.type] = feedbackMap;
        }
        break;

      case SentryRuntime.listType:
        if (runtimes.length == 1) {
          final runtime = runtimes[0];
          final runtimeMap = runtime.toJson();
          if (runtimeMap.isNotEmpty) {
            final key = runtime.key ?? SentryRuntime.type;

            json[key] = runtimeMap;
          }
        } else if (runtimes.length > 1) {
          for (final runtime in runtimes) {
            final runtimeMap = runtime.toJson();
            if (runtimeMap.isNotEmpty) {
              var key = runtime.key ?? runtime.name!.toLowerCase();

              if (json.containsKey(key)) {
                var k = 0;
                while (json.containsKey(key)) {
                  key = '$key$k';
                  k++;
                }
              }
              json[key] = runtimeMap
                ..addAll(<String, String>{'type': SentryRuntime.type});
            }
          }
        }

        break;

      default:
        if (value != null) {
          json[key] = value;
        }
    }
  });

  return json;
}