docs: @Override
    public void onMessage(WebSocket webSocket, String message) {
      JsonObject json = new JsonParser().parse(message).getAsJsonObject();
      if (json.has(ERROR)) {
        String error = json.get(ERROR).getAsString();
        callback.onError(new RuntimeException(error));
  
      } else if (json.has(WARNINGS)) {
        String warning = json.get(WARNINGS).getAsString();
        callback.onWarning(new RuntimeException(warning));
      } else if (json.has(BINARY_STREAMS)) {
        String contentType = json.get(BINARY_STREAMS)
            .getAsJsonArray()
            .get(0)
            .getAsJsonObject()
            .get(CONTENT_TYPE)
            .getAsString();
        callback.onContentType(contentType);
      } else if (json.has(WORDS)) {
        callback.onTimings(GSON.fromJson(message, Timings.class));
      } else if (json.has(MARKS)) {
        callback.onMarks(GSON.fromJson(message, Marks.class));
      }
    }