pub async fn grade_submission(
    conn: &mut PgConnection,
    submission: &ExerciseTaskSubmission,
    exercise_task: &ExerciseTask,
    exercise: &Exercise,
    grading: &ExerciseTaskGrading,
    user_exercise_state: &UserExerciseState,
    fetch_service_info: impl Fn(Url) -> BoxFuture<'static, ModelResult<ExerciseServiceInfoApi>>,
    send_grading_request: impl Fn(Url, &ExerciseTask, &ExerciseTaskSubmission) -> BoxFuture<'static, ModelResult<ExerciseTaskGradingResult>>
) -> ModelResult<ExerciseTaskGrading>