public static Value<?> convertMessageToBencode (Message msg) {
        Objects.requireNonNull(msg);

        if (msg instanceof ErrorMessage) {
            return convertErrorMessage((ErrorMessage) msg);

        } else if (msg instanceof QueryMessage) {
            return convertQueryMessage((QueryMessage) msg);

        } else if (msg instanceof ResponseMessage) {
            return convertResponseMessage((ResponseMessage) msg);

        } else {
            throw new IllegalArgumentException();
        }
    }