platform/graphql_server/lib/src/apollo/transport.dart

51 lines
1.6 KiB
Dart
Raw Normal View History

2019-04-18 02:02:27 +00:00
import 'dart:async';
import 'package:graphql_schema/graphql_schema.dart';
import 'package:stream_channel/stream_channel.dart';
/// A basic message in the Apollo WebSocket protocol.
class OperationMessage {
static const String gqlConnectionInit = 'GQL_CONNECTION_INIT',
gqlConnectionAck = 'GQL_CONNECTION_ACK',
gqlConnectionKeepAlive = 'GQL_CONNECTION_KEEP_ALIVE',
gqlConnectionError = 'GQL_CONNECTION_ERROR',
gqlStart = 'GQL_START',
gqlStop = 'GQL_STOP',
gqlConnectionTerminate = 'GQL_CONNECTION_TERMINATE',
gqlData = 'GQL_DATA',
gqlError = 'GQL_ERROR',
gqlComplete = 'GQL_COMPLETE';
final dynamic payload;
final String id;
final String type;
OperationMessage(this.type, {this.payload, this.id});
factory OperationMessage.fromJson(Map map) {
var type = map['type'];
var payload = map['payload'];
var id = map['id'];
if (type == null)
throw ArgumentError.notNull('type');
else if (type is! String)
throw ArgumentError.value(type, 'type', 'must be a string');
else if (id != null && id is! String)
throw ArgumentError.value(type, 'id', 'must be a string');
return OperationMessage(type as String, id: id as String, payload: payload);
}
Map<String, dynamic> toJson() {
var out = <String, dynamic>{'type': type};
if (id != null) out['id'] = id;
if (payload != null) out['payload'] = payload;
return out;
}
}
class GraphQLResult {
final dynamic data;
final Iterable<GraphQLExceptionError> errors;
GraphQLResult(this.data, {this.errors: const []});
}