WebSocketMetrics.fromJson constructor

WebSocketMetrics.fromJson(
  1. Map<String, Object?> json
)

Create WebSocket metrics from JSON Object WebSocket metrics.

Implementation

factory WebSocketMetrics.fromJson(Map<String, Object?> json) {
  R extract<T, R>(
      String key, R Function(T value) convert, R Function() fallback) {
    if (json[key] case T value) {
      try {
        return convert(value);
      } on Object {
        return fallback();
      }
    } else {
      return fallback();
    }
  }

  return WebSocketMetrics(
    timestamp: extract<int, DateTime>(
      'timestamp',
      DateTime.fromMillisecondsSinceEpoch,
      DateTime.now,
    ),
    readyState: extract<int, WebSocketReadyState>(
      'readyState',
      WebSocketReadyState.fromCode,
      () => WebSocketReadyState.closed,
    ),
    reconnectTimeout: extract<int, Duration>(
      'reconnectTimeout',
      (v) => Duration(milliseconds: v),
      () => Duration.zero,
    ),
    transferredSize: extract<String, BigInt>(
      'transferredSize',
      BigInt.parse,
      () => BigInt.zero,
    ),
    receivedSize: extract<String, BigInt>(
      'receivedSize',
      BigInt.parse,
      () => BigInt.zero,
    ),
    transferredCount: extract<String, BigInt>(
      'transferredCount',
      BigInt.parse,
      () => BigInt.zero,
    ),
    receivedCount: extract<String, BigInt>(
      'receivedCount',
      BigInt.parse,
      () => BigInt.zero,
    ),
    reconnects: (
      successful: extract<int, int>(
        'reconnectsSuccessful',
        (v) => v,
        () => 0,
      ),
      total: extract<int, int>(
        'reconnectsTotal',
        (v) => v,
        () => 0,
      )
    ),
    lastSuccessfulConnectionTime: extract<int, DateTime?>(
      'lastSuccessfulConnectionTime',
      DateTime.fromMillisecondsSinceEpoch,
      () => null,
    ),
    disconnects: extract<int, int>(
      'disconnects',
      (v) => v,
      () => 0,
    ),
    lastDisconnectTime: extract<int, DateTime?>(
      'lastDisconnectTime',
      DateTime.fromMillisecondsSinceEpoch,
      () => null,
    ),
    lastDisconnect: (
      code: extract<int?, int?>(
        'lastDisconnectCode',
        (v) => v,
        () => null,
      ),
      reason: extract<String?, String?>(
        'lastDisconnectReason',
        (v) => v,
        () => null,
      ),
    ),
    lastUrl: extract<String?, String?>(
      'lastUrl',
      (v) => v,
      () => null,
    ),
    expectedReconnectTime: extract<int, DateTime?>(
      'expectedReconnectTime',
      DateTime.fromMillisecondsSinceEpoch,
      () => null,
    ),
  );
}