parse static method

GraphQLSocketMessage parse(
  1. dynamic message
)

Implementation

static GraphQLSocketMessage parse(dynamic message) {
  final Map<String, dynamic> map =
      json.decode(message as String) as Map<String, dynamic>;
  final String type = (map['type'] ?? 'unknown') as String;
  final payload = map['payload'] ?? <String, dynamic>{};
  final String id = (map['id'] ?? 'none') as String;

  switch (type) {
    // for completeness
    case MessageTypes.connectionInit:
      return InitOperation(payload);
    case MessageTypes.connectionTerminate:
      return TerminateOperation();

    case MessageTypes.connectionAck:
      return ConnectionAck();
    case MessageTypes.connectionError:
      return ConnectionError(payload);
    case MessageTypes.connectionKeepAlive:
      return ConnectionKeepAlive();

    // for completeness
    case MessageTypes.subscribe:
      return SubscribeOperation(id, payload as Map<String, dynamic>);
    case MessageTypes.start:
      return StartOperation(id, payload as Map<String, dynamic>);
    case MessageTypes.stop:
      return StopOperation(id);
    case MessageTypes.ping:
      return PingMessage(payload as Map<String, dynamic>);
    case MessageTypes.pong:
      return PongMessage(payload as Map<String, dynamic>);

    case MessageTypes.data:
      return SubscriptionData(id, payload['data'], payload['errors']);
    case MessageTypes.next:
      return SubscriptionNext(id, payload['data'], payload['errors']);
    case MessageTypes.error:
      return SubscriptionError(id, payload);
    case MessageTypes.complete:
      return SubscriptionComplete(id);
    default:
      return UnknownData(map);
  }
}