import 'package:mchess/api/move.dart'; enum MessageType { moveMessage, colorDetermined; String toJson() => name; static MessageType fromJson(String json) => values.byName(json); } enum ApiColor { black, white; String toJson() => name; static ApiColor fromJson(String json) => values.byName(json); } class ApiWebsocketMessage { final MessageType type; final ApiMove? move; final ApiColor? color; ApiWebsocketMessage( {required this.type, required this.move, required this.color}); factory ApiWebsocketMessage.fromJson(Map json) { final type = MessageType.fromJson(json['messageType']); ApiWebsocketMessage ret; switch (type) { case MessageType.colorDetermined: ret = ApiWebsocketMessage( type: type, move: null, color: ApiColor.fromJson(json['color'])); break; case MessageType.moveMessage: ret = ApiWebsocketMessage( type: type, move: ApiMove.fromJson(json['move']), color: null); } return ret; } }