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>